diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-28 18:34:16 +0100 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-28 18:48:27 +0100 |
| commit | a210419fd60c00d011f70fb1b968031621e4c01a (patch) | |
| tree | 68e7f8891970c230a63755e7714bb6f66f00a99d /lambda-calcul/haskell/src/Minilang/IO.hs | |
| parent | 1c4a175e00e727ac4987f60503bd7dbaeb3f26ad (diff) | |
| download | lambda-nantes-a210419fd60c00d011f70fb1b968031621e4c01a.tar.gz | |
Provide function to go back from a deBruijn term to an AST
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/IO.hs')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/IO.hs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/IO.hs b/lambda-calcul/haskell/src/Minilang/IO.hs index a045647..b2b3dcc 100644 --- a/lambda-calcul/haskell/src/Minilang/IO.hs +++ b/lambda-calcul/haskell/src/Minilang/IO.hs @@ -7,8 +7,8 @@ import Data.Text.Encoding encodeUtf8, ) import Data.Text.Encoding.Error (lenientDecode) -import Minilang.Lambda.DeBruijn (eval, toDeBruijn) -import Minilang.Lambda.Parser (desugar, parse, pretty) +import Minilang.Lambda.DeBruijn (eval, fromDeBruijn, toDeBruijn) +import Minilang.Lambda.Parser (desugar, parse, pretty, resugar) import System.IO (Handle) -- | Read a "program" from @hin@ handle, evaluate it and dump the result @@ -17,11 +17,19 @@ runEval :: Handle -> Handle -> IO () runEval hin hout = do programText <- decodeUtf8With lenientDecode <$> BS.hGetContents hin let parsed = parse programText - case parsed of - Left err -> print err - Right ast -> do - putStrLn $ Text.unpack $ "Evaluating " <> pretty ast - let termy = desugar ast - putStrLn $ "Desugared to " <> show termy - let term = toDeBruijn termy - print $ eval term + let result = + case parsed of + Left err -> Text.pack $ show err + Right ast -> + let evaluate = + pretty + . resugar + . fromDeBruijn + . eval + . toDeBruijn + . desugar + in evaluate ast + + BS.hPut + hout + (encodeUtf8 result) |
