A categorical programming language
名称 | 大小 | Rev. | 时间 | 作者 | Log Message |
---|---|---|---|---|---|
bk | |||||
hive | |||||
jelly | |||||
movelist | |||||
sampler | |||||
schemata | |||||
wallpapers | |||||
.envrc | 186 | f47e44b | 2023-04-25 13:48:29 | Corbin | Become a Nix flake. I had to use nix... |
.gitignore | 807 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
.ocamlformat | 16 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
2to3.py | 2.64 k | 8b60dc0 | 2024-04-25 10:34:53 | Corbin | Get 2to3.py to build a v3 hive. I ha... |
LICENSE | 33.71 k | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
README.txt | 1.51 k | be70233 | 2023-03-24 19:03:47 | Corbin | Implement trees in REPL and typecheck... |
bench.py | 940 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
bench.sh | 253 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
checklist.txt | 5.46 k | 530f14a | 2024-03-12 06:21:52 | Corbin | Include zaha. |
flake.lock | 2.05 k | 530f14a | 2024-03-12 06:21:52 | Corbin | Include zaha. |
flake.nix | 2.77 k | 3695ea1 | 2024-04-24 15:50:56 | Corbin | Start hacking up a proper migration f... |
groom.sh | 130 | 684744a | 2023-03-19 11:50:58 | Corbin | Start a tool for updating hives. |
hive.json | 97.12 k | 34b5bd0 | 2023-06-05 03:05:20 | Corbin | cammyo: Fix a typo. |
make-demos.sh | 535 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
make-kleisli-cat.sh | 656 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
proof.txt | 680 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
ski2cammy.py | 1.01 k | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
start-repl.sh | 156 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
todo.txt | 22.54 k | 3695ea1 | 2024-04-24 15:50:56 | Corbin | Start hacking up a proper migration f... |
tools.dot | 205 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
update-jelly.sh | 131 | 3b77fb5 | 2023-03-24 16:24:46 | Corbin | Update jelly and prepare for future j... |
update-openapi.sh | 122 | 3c16c3b | 2023-01-10 09:15:42 | Corbin | Use a macro to simplify some append°.... |
## Cammy "[Cammy is] really not a good language for anything." ~ [Me](https://lobste.rs/s/ftqp21/whatever_happened_elm_anyway#c_8fnjr6) # How to add new primitives/jets * Jet definitions in jets.json * New primitive arrows in prims.json * CAM operations in cammylib/cam.py * Parser/compiler to CAM in cammylib/arrows.py * Typechecker in cammyo.scm * Interpreters in cammyo.scm and cammy.scm * Algebraic laws (optimizations, jet introduction) in jelly/src/main.rs # 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: $ ./update-jelly.sh # 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.