tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

commit 1e7b2cd2236d3e6d3935399a467d377e014b5034
parent 8d7bdfa99ace8865489b91d466a8e93795ff65d1
Author: James Eversole <james@eversole.co>
Date:   Sun,  2 Feb 2025 12:08:01 -0600

Support for list literals in Lambdas

Diffstat:
Msrc/Eval.hs | 3+++
Mtest/Spec.hs | 4++++
Mtricu.cabal | 2+-
3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/Eval.hs b/src/Eval.hs @@ -75,6 +75,9 @@ elimLambda = go go (SLambda [f] (SLambda [g] (SLambda [x] body))) | body == SApp (SVar f) (SApp (SVar g) (SVar x)) = _B -- General elimination + go (SLambda [v] (SList xs)) + = elimLambda (SLambda [v] (foldr wrapTLeaf TLeaf xs)) + where wrapTLeaf m r = SApp (SApp TLeaf m) r go (SLambda (v:vs) body) | null vs = toSKI v (elimLambda body) | otherwise = elimLambda (SLambda [v] (SLambda vs body)) diff --git a/test/Spec.hs b/test/Spec.hs @@ -341,6 +341,10 @@ lambdas = testGroup "Lambda Evaluation Tests" , testCase "Lambda with a list literal" $ do let input = "f = (\\x : x)\nf [t (t t)]" runTricu input @?= "Fork Leaf (Fork (Stem Leaf) Leaf)" + + , testCase "Lambda with list literal" $ do + let input = "(\\a : [(a)]) 1" + runTricu input @?= "Fork (Fork (Stem Leaf) Leaf) Leaf" ] providedLibraries :: TestTree diff --git a/tricu.cabal b/tricu.cabal @@ -1,7 +1,7 @@ cabal-version: 1.12 name: tricu -version: 0.15.0 +version: 0.16.0 description: A micro-language for exploring Tree Calculus author: James Eversole maintainer: james@eversole.co