An implementation of a parser, evaluator, printer, and visualizer for SKI.
- TypeScript
- Deno
- Rust (compiled to WebAssembly)
- Nix (build orchestration)
This project uses a Makefile for common development tasks:
make setup # Install necessary tools (Nix, configure experimental features)
make build # Compile all artifacts (WASM, TypeScript, dist files)
make test # Run the complete test suite (Rust + Deno tests, linting, formatting)For detailed information about what each target does, see the
Makefile or run make help.
This project includes VS Code workspace settings that require the following extensions:
- Deno - Official Deno extension for TypeScript support, linting, and IntelliSense
The .vscode/settings.json file configures:
- Enables the Deno extension for this workspace
- Disables the built-in TypeScript language server to avoid conflicts
- Configures Deno linting and import suggestions
- Install the Deno extension in VS Code
- Clone the repository
- Run
make setupto install and configure Nix - Open the project in VS Code - the workspace settings will automatically apply
This project uses Nix for reproducible builds and version management. The build system orchestrates Rust → WASM → TypeScript builds with a single source of truth for versioning.
Note: The nixpkgs input tracks nixos-unstable branch, with the exact
commit pinned in flake.lock for reproducibility. To update to a newer nixpkgs
revision, run nix flake update.
- Combinators: A Centennial View, Stephen Wolfram
- To Mock a Mockingbird, Raymond Smullyan
- Combinatory Logic Volume I, Haskell Brooks Curry & Robert Feys
- D. A. Turner, "A new implementation technique for applicative languages," Software: Practice and Experience, vol. 9, no. 1, pp. 31-49, 1979. DOI: 10.1002/spe.4380090105
- W. Stoye, T. J. W. Clarke, and A. C. Norman, "Some practical methods for rapid combinator reduction," in Proceedings of the 1984 ACM Symposium on LISP and Functional Programming (LFP '84), ACM, New York, NY, USA, pp. 159-166, 1984. DOI: 10.1145/800055.802038
- H. G. Baker, "CONS should not CONS its arguments, or, a lazy alloc is a smart alloc," ACM SIGPLAN Notices, vol. 27, no. 3, pp. 24-34, 1992. DOI: 10.1145/130854.130858
GitHub Actions use the Makefile targets for building and testing. See the
workflow files in .github/workflows/ for details.