diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-11-05 12:07:48 +0100 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-11-05 12:07:48 +0100 |
| commit | 10feb2dc8ad775a64b6db4d19c76bd6fa38044a8 (patch) | |
| tree | 823892a835dc7884106c301cd47b83c16ff27356 /lambda-calcul/haskell/src/Minilang | |
| parent | 99e2ce71faa82e7b99574895e0fe24183ba9f6c3 (diff) | |
| download | lambda-nantes-10feb2dc8ad775a64b6db4d19c76bd6fa38044a8.tar.gz | |
fix resolution of free variables
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda.hs | 4 | ||||
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda/DeBruijn.hs | 6 |
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 |
