diff --git a/src/Eval.hs b/src/Eval.hs index 46b077b..33485b8 100644 --- 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 index a1912de..3a8dcfc 100644 --- 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 index 983a817..9a0ba0f 100644 --- 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