summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/Lambda
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Lambda/DeBruijn.hs6
1 files changed, 4 insertions, 2 deletions
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