# sapling ## Introduction sapling is a "micro-language" that I'm working on to investigate [Tree Calculus](https://github.com/barry-jay-personal/typed_tree_calculus/blob/main/typed_program_analysis.pdf) . It offers a minimal amount of syntax sugar: - `t` operator behaving by the rules of Tree Calculus - Function ("variable") definitions - Lambda abstractions - List, Number, and String literals (WIP) This is an active experimentation project by [someone who has no idea what they're doing](https://eversole.co). ## What does it look like? ``` false = t true = t t id = (\\a : a) triage = (\\a b c : t (t a b) c) match_bool = (\\ot of : triage of (\\z : ot) t) and = match_bool id (\\z : false) if = (\\cond then else : t (t else (t t then)) t cond) triage = (\\a b c : t (t a b) c) test = triage \"leaf\" (\\z : \"stem\") (\\a b : \"fork\") sapling < test t sapling > Fork (...) DECODE -: "leaf" sapling < test (t t) sapling > Fork (...) DECODE -: "stem" sapling < test (t t t) sapling > Fork (...) DECODE -: "fork" ``` ## How to use For now, you can easily build and run this project using Nix: 1. Clone the repository: a. `git clone ssh://git.eversole.co/sapling.git` b. `git clone https://git.eversole/sapling.git` 1. Run the REPL: `nix run` ## Acknowledgements Tree Calculus was discovered by [Barry Jay](https://github.com/barry-jay-personal/blog). [treecalcul.us](https://treecalcul.us) is an excellent website with an intuitive playground created by [Johannes Bader](https://johannes-bader.com/) that introduced me to Tree Calculus. If sapling sounds interesting but compiling this repo sounds like a hassle, you should check out his site.