A categorical programming language
Rev. | Time | Author | Message |
---|---|---|---|
8b60dc0 | 2024-04-25 10:34:53 | Corbin | master Get 2to3.py to build a v3 hive. I haven't verified that ... |
3695ea1 | 2024-04-24 15:50:56 | Corbin | Start hacking up a proper migration for old hives. The s... |
cca897f | 2024-03-30 02:39:05 | Corbin | Maybe solve the (comp dup nil) problem? |
530f14a | 2024-03-12 06:21:52 | Corbin | Include zaha. |
5dbcebd | 2023-12-22 15:02:53 | Corbin | jelly: Parallelize recursion and folds. This should be c... |
1edc88b | 2023-10-21 13:52:25 | Corbin | Try prototyping type inference for algebras. I'm really ... |
a7d1038 | 2023-09-29 07:58:20 | Corbin | Enumerate jets for an expr? I don't like this. |
b79c5eb | 2023-09-26 10:46:18 | Corbin | Successfully insert and fetch a nested AST. What is left... |
ec13b16 | 2023-09-19 12:57:12 | Corbin | Flesh out a basic tree-insertion tool. This is sufficien... |
59169e1 | 2023-09-19 04:03:15 | Corbin | Build a new thing with libgit2 and CHICKEN. |
Name | Rev. | Time | Author | Message |
---|---|---|---|---|
master | 8b60dc0 | 2024-04-25 10:34:53 | Corbin | Get 2to3.py to build a v3 h... |
## 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.