diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-13 18:46:17 +0200 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-13 18:46:17 +0200 |
| commit | c6eaf6f117e0fe6c92a81dab542845d4ae8f64f7 (patch) | |
| tree | 6971cdd666ecc699e95053b4e1ea79ca5b0d3648 /lambda-calcul | |
| parent | 3a67e69bfe9492d2a2fc5e4b07cc8c909a346064 (diff) | |
| download | lambda-nantes-c6eaf6f117e0fe6c92a81dab542845d4ae8f64f7.tar.gz | |
add minimal radicle CI configuration
Diffstat (limited to 'lambda-calcul')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/IO.hs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/IO.hs b/lambda-calcul/haskell/src/Minilang/IO.hs new file mode 100644 index 0000000..bfcb125 --- /dev/null +++ b/lambda-calcul/haskell/src/Minilang/IO.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TypeSynonymInstances #-} +{-# OPTIONS_GHC "-fno-warn-orphans" #-} + +module Minilang.IO where + +import qualified Data.ByteString as BS +import Data.Text.Encoding + ( decodeUtf8With, + encodeUtf8, + ) +import Data.Text.Encoding.Error (lenientDecode) +import Minilang.Lambda.Eval hiding (rho) +import Minilang.Parser +import Minilang.Type +import Prettyprinter +import Prettyprinter.Render.Text +import System.IO (Handle) + +-- | Read an `AST` from @hin@ handle, evaluate it and dump the result +-- on @hout@. +runEval :: Handle -> Handle -> IO () +runEval hin hout = do + programText <- decodeUtf8With lenientDecode <$> BS.hGetContents hin + let ast = parseProgram False programText + ρ = EmptyEnv + γ = EmptyContext + (ρ', _) <- loadProgram ast ρ γ + let val = eval ast ρ' + + BS.hPut + hout + ( encodeUtf8 + ( renderStrict $ layoutPretty defaultLayoutOptions $ pretty val + ) + <> "\n" + ) |
