A categorical programming language
Rev. | 时间 | 作者 | Message |
---|---|---|---|
5452910 | 2022-07-25 06:28:24 | Corbin | master Damn you're fast. |
fa785ac | 2022-07-13 00:40:27 | Corbin | Display trails in the REPL when available. |
57f5967 | 2022-07-12 09:35:51 | Corbin | Teach movelist about app, and improve jelly in tandem. |
5fd12d1 | 2022-07-10 12:56:20 | Corbin | Specialize (uncurry id) to app. |
b5514df | 2022-07-03 23:20:13 | Corbin | Add the ability to display sequences, not just elements. |
c7ccf92 | 2022-07-02 14:49:58 | Corbin | Implement the remainder function. |
dbe659e | 2022-07-02 12:06:13 | Corbin | Logarithms for floats. |
f34cbf0 | 2022-06-26 12:00:46 | Corbin | Add another demo. |
76b698c | 2022-06-24 14:26:09 | Corbin | Implement left-shifting for bits. |
714d4c0 | 2022-06-20 14:10:40 | Corbin | Let the viewport for drawings automatically scale. |
# Jelly The jelly optimizer is a Cammy-to-Cammy optimizer which uses e-graphs to search for the smallest equivalent expression. The rule engine is from the `egg` library. The rules are written in a DSL embedded in Rust, along with comments explaining their provenance and correctness. To update Cargo dependencies for jelly: $ nix-shell -p crate2nix cargo $ cd jelly/ $ cargo metadata $ crate2nix generate # Movelist The movelist is a relational typechecker written in CHICKEN Scheme's dialect of miniKanren. It can typecheck a Cammy expression, or take a type representation and synthesize Cammy expressions with the given type. To update eggs for movelist: $ egg2nix movelist/eggs.scm > movelist/eggs.nix # Shell Environment The environment for developing the Cammy toolchain is contained within `shell.nix`. To update eggs for the shell environment: $ egg2nix eggs.scm > eggs.nix # Compiling to Categories The second argument to cammy-frame applies a list of functors. Each functor corresponds to a path in the hive; functor `foo` corresponds to `cats/foo/`. The list is comma-separated and applied left-to-right.