summaryrefslogtreecommitdiff
path: root/lambda-calcul
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-10-13 18:46:17 +0200
committerArnaud Bailly <arnaud@pankzsoft.com>2025-10-13 18:46:17 +0200
commitc6eaf6f117e0fe6c92a81dab542845d4ae8f64f7 (patch)
tree6971cdd666ecc699e95053b4e1ea79ca5b0d3648 /lambda-calcul
parent3a67e69bfe9492d2a2fc5e4b07cc8c909a346064 (diff)
downloadlambda-nantes-c6eaf6f117e0fe6c92a81dab542845d4ae8f64f7.tar.gz
add minimal radicle CI configuration
Diffstat (limited to 'lambda-calcul')
-rw-r--r--lambda-calcul/haskell/src/Minilang/IO.hs40
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"
+ )