summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/IO.hs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-10-28 18:34:16 +0100
committerArnaud Bailly <arnaud@pankzsoft.com>2025-10-28 18:48:27 +0100
commita210419fd60c00d011f70fb1b968031621e4c01a (patch)
tree68e7f8891970c230a63755e7714bb6f66f00a99d /lambda-calcul/haskell/src/Minilang/IO.hs
parent1c4a175e00e727ac4987f60503bd7dbaeb3f26ad (diff)
downloadlambda-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.hs28
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)