summaryrefslogtreecommitdiff
path: root/app/Load.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Load.hs')
-rw-r--r--app/Load.hs17
1 files changed, 10 insertions, 7 deletions
diff --git a/app/Load.hs b/app/Load.hs
index 23b92fe..85a6d03 100644
--- a/app/Load.hs
+++ b/app/Load.hs
@@ -1,13 +1,14 @@
module Load where
-import Code (Code, Interp(..))
+import Code (Code, PrlgEnv)
+import CodeLens
import qualified Compiler as C
import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Except (except)
-import Control.Monad.Trans.State.Lazy (gets, modify)
+import Control.Monad.Trans.Except (ExceptT, except)
import qualified Data.Map as M
-import Env (PrlgEnv, findAtom, findStruct, withStrTable)
+import Env (findAtom, findStruct, withStrTable)
import qualified IR
+import Lens.Family2.State
import qualified Parser as P
import qualified Text.Megaparsec as MP
@@ -20,8 +21,9 @@ tokenize fn = left MP.errorBundlePretty . MP.parse P.lexPrlg fn
parse :: String -> [P.Lexeme] -> Either String [P.PAST]
parse fn = left MP.errorBundlePretty . MP.parse P.parsePrlg fn
+shunt :: P.PAST -> ExceptT String PrlgEnv IR.PrlgStr
shunt past = do
- ops <- lift $ gets ops
+ ops <- lift $ use ops
except . left (\err -> "operator resolution: " ++ err ++ "\n") $
P.shuntPrlg ops past
@@ -50,7 +52,7 @@ expansion noexpand expander output x = do
es <- findStruct expander 2
o <- findAtom output
comma <- findAtom ","
- expand <- gets (M.member es . defs)
+ expand <- defs `uses` M.member es
pure $
if expand
then IR.CallI
@@ -64,6 +66,7 @@ queryExpansion = expansion (\_ -> id) "expand_query" "call"
loadExpansion = expansion (\o x -> IR.CallI o [x]) "expand_load" "assert"
+processInput :: String -> Bool -> String -> ExceptT String PrlgEnv ()
processInput fn queryMode input = do
asts <- except $ tokenize fn input >>= parse fn
- lift . modify $ \s -> s {cmdq = [(queryMode, ast) | ast <- asts]}
+ lift $ cmdq .= [(queryMode, ast) | ast <- asts]