2024-12-28 22:20:43 -06:00
2024-12-27 08:17:06 -06:00
2024-12-18 18:59:07 -06:00
2024-12-18 19:41:12 -06:00
2024-12-18 19:15:56 -06:00
2024-12-28 22:20:43 -06:00
2024-12-18 18:59:07 -06:00

sapling

Introduction

sapling is a "micro-language" that I'm working on to investigate Tree Calculus .

It offers a minimal amount of syntax sugar yet provides a complete and intuitive programming environment. Sapling offers:

  • t operator behaving by the rules of Tree Calculus
  • Function ("variable") definitions
  • Lambda abstractions
  • List, Number, and String literals

What does it look like?

-- Anything after `--` on a line is a comment
-- We can define functions or "variables" as tree calculus values
false = t 
_ = t
true = t t
-- We can define functions as lambda expressions that are eliminated to tree
-- calculus terms.
id = (\a : a) -- t (t (t t)) t
triage = (\a b c : t (t a b) c) 
triage = (\a b c : t (t a b) c)
-- Intensionality !!!
test = triage "Leaf" (\_ : "Stem") (\_ _ : "Fork")

-- REPL
-- `sapling <` is the input prompt
-- `sapling >` is the Tree Calculus form output. Most are elided below.
-- `DECODE -:` is an attempt to interpret the TC output as strings/numbers.
sapling < test t
sapling > Fork (Fork Leaf (Fork ...) ... ) 
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.

  • 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.

treecalcul.us is an excellent website with an intuitive playground created by Johannes Bader that introduced me to Tree Calculus. If sapling sounds interesting but compiling this repo sounds like a hassle, you should check out his site.

Description
A micro-language for exploring Tree Calculus
Readme
Languages
Haskell 97%
Nix 3%