summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda.hs4
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda/DeBruijn.hs6
2 files changed, 6 insertions, 4 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda.hs b/lambda-calcul/haskell/src/Minilang/Lambda.hs
index 2372578..d223658 100644
--- a/lambda-calcul/haskell/src/Minilang/Lambda.hs
+++ b/lambda-calcul/haskell/src/Minilang/Lambda.hs
@@ -22,8 +22,8 @@ loadProgram language env context exprs =
fmap (\(res, e, c) -> (reverse res, e, c)) result
where
result =
- foldr
- ( \expr acc ->
+ foldl
+ ( \acc expr ->
case acc of
Left typeError -> Left typeError
Right (results, env', context') ->
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda/DeBruijn.hs b/lambda-calcul/haskell/src/Minilang/Lambda/DeBruijn.hs
index de179ad..025fd39 100644
--- a/lambda-calcul/haskell/src/Minilang/Lambda/DeBruijn.hs
+++ b/lambda-calcul/haskell/src/Minilang/Lambda/DeBruijn.hs
@@ -47,14 +47,16 @@ eval (App f a) =
f' -> App f' a
eval term = term
-eval' :: Show ann => Env ann -> DeBruijn ann -> DeBruijn ann
+eval' :: (Show ann, Eq ann) => Env ann -> DeBruijn ann -> DeBruijn ann
eval' env (FV v) = case lookup v env of
Just term -> term
Nothing -> FV v
eval' env (App f a) =
case eval' env f of
Lam _ body -> eval' env (substitute env 0 a body)
- f' -> eval' env $ App f' a
+ f' -> if f' /= f
+ then eval' env $ App f' a
+ else App f' a
eval' _ term = term
substitute :: Env ann -> Int -> DeBruijn ann -> DeBruijn ann -> DeBruijn ann