From c6eaf6f117e0fe6c92a81dab542845d4ae8f64f7 Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Mon, 13 Oct 2025 18:46:17 +0200 Subject: add minimal radicle CI configuration --- lambda-calcul/haskell/src/Minilang/IO.hs | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lambda-calcul/haskell/src/Minilang/IO.hs (limited to 'lambda-calcul/haskell') 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" + ) -- cgit v1.2.3