diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-17 22:29:01 +0200 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-17 22:29:01 +0200 |
| commit | 5cba53dd054222ce3319a1efe6803952c9675889 (patch) | |
| tree | 0de3837c6e69ab551c0314b8d225546c078b149e | |
| parent | 2488429444c2740a075a1f13217ca1838f11026f (diff) | |
| download | lambda-nantes-5cba53dd054222ce3319a1efe6803952c9675889.tar.gz | |
feat: main program evaluates s-expressions
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/IO.hs | 15 | ||||
| -rw-r--r-- | lambda-calcul/haskell/test/Minilang/IOSpec.hs | 2 |
2 files changed, 11 insertions, 6 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/IO.hs b/lambda-calcul/haskell/src/Minilang/IO.hs index c468316..28b6f01 100644 --- a/lambda-calcul/haskell/src/Minilang/IO.hs +++ b/lambda-calcul/haskell/src/Minilang/IO.hs @@ -9,16 +9,21 @@ import Data.Text.Encoding import Data.Text.Encoding.Error (lenientDecode) import Minilang.Lambda.Eval (eval) import System.IO (Handle) +import Minilang.Lambda.Parser (parse, desugar) -- | Read a "program" from @hin@ handle, evaluate it and dump the result -- on @hout@. runEval :: Handle -> Handle -> IO () runEval hin hout = do - programText <- Text.unpack . decodeUtf8With lenientDecode <$> BS.hGetContents hin - let ast = read programText - env = mempty - result = eval ast env + programText <- decodeUtf8With lenientDecode <$> BS.hGetContents hin + let parsed = parse programText + result = case parsed of + Left err -> show err + Right ast -> + let term = desugar ast + env = mempty + in show $ eval term env BS.hPut hout - (encodeUtf8 (Text.pack (show result) <> "\n")) + (encodeUtf8 (Text.pack result <> "\n")) diff --git a/lambda-calcul/haskell/test/Minilang/IOSpec.hs b/lambda-calcul/haskell/test/Minilang/IOSpec.hs index 038877d..c4ae13e 100644 --- a/lambda-calcul/haskell/test/Minilang/IOSpec.hs +++ b/lambda-calcul/haskell/test/Minilang/IOSpec.hs @@ -16,7 +16,7 @@ spec = parallel $ it "evaluates a simple MiniLang 'program' and dumps result" $ \fileName -> do let outputFileName = fileName <> ".out" program = - [ "(App (Lam \"x\" (Var \"x\")) (Var \"y\"))" + [ "((lam (x) x) y)" ] writeFile fileName (unlines program) |
