53 lines
1.9 KiB
Markdown
53 lines
1.9 KiB
Markdown
# 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
|
|
_ = t
|
|
true = t t
|
|
id = (\a : a)
|
|
triage = (\a b c : t (t a b) c)
|
|
match_bool = (\ot of : triage of (\_ : ot) t)
|
|
and = match_bool id (\_ : 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" (\_ : "stem") (\_ _ : "fork")
|
|
|
|
-- The REPL outputs the tree form results by default; they are elided here.
|
|
sapling < test t
|
|
DECODE -: "leaf"
|
|
sapling < test (t t)
|
|
DECODE -: "stem"
|
|
sapling < test (t t t)
|
|
DECODE -: "fork"
|
|
sapling < map (\i : listConcat i " is super cool!") [("He") ("She") ("Everybody")]
|
|
DECODE -: ["He is super cool!", "She is super cool!", "Everybody is super cool!"]
|
|
```
|
|
|
|
## Installation
|
|
|
|
You can easily build and/or run this project using [Nix](https://nixos.org/download/).
|
|
|
|
- Build REPL binary: `nix build git+https://git.eversole.co/James/sapling`
|
|
- Run REPL: `nix run git+https://git.eversole.co/James/sapling`
|
|
|
|
## 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.
|