From b9633a33182f5b381e912366273709e59f469bb9 Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Sat, 12 Nov 2022 17:47:51 +0100 Subject: reorg. --- app/Env.hs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 app/Env.hs (limited to 'app/Env.hs') diff --git a/app/Env.hs b/app/Env.hs new file mode 100644 index 0000000..7ede4c2 --- /dev/null +++ b/app/Env.hs @@ -0,0 +1,33 @@ +module Env where + +import qualified Code +import Control.Monad.IO.Class +import Control.Monad.Trans.State.Lazy +import qualified IR +import qualified Operators +import System.Console.Haskeline + +data PrlgState = + PrlgState + { defs :: Code.Defs + , ops :: Operators.Ops + , strtable :: IR.StrTable + } + deriving (Show) + +type PrlgEnv a = StateT PrlgState (InputT IO) a + +withStrTable :: (IR.StrTable -> (IR.StrTable, a)) -> PrlgEnv a +withStrTable f = do + st <- gets strtable + let (st', x) = f st + modify (\s -> s {strtable = st'}) + return x + +findStruct :: String -> Int -> PrlgEnv IR.Id +findStruct str arity = do + stri <- findAtom str + return IR.Id {IR.str = stri, IR.arity = arity} + +findAtom :: String -> PrlgEnv Int +findAtom = withStrTable . flip IR.strtablize -- cgit v1.2.3