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:
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