diff options
| author | Mirek Kratochvil <exa.exa@gmail.com> | 2023-02-25 22:35:59 +0100 |
|---|---|---|
| committer | Mirek Kratochvil <exa.exa@gmail.com> | 2023-02-25 22:35:59 +0100 |
| commit | 81df52f6565c073f9638108a66304d0ecc6cac02 (patch) | |
| tree | 6fd48069777d403177de923183afa6d8ca40349d /app/Load.hs | |
| parent | 3eb6125609245c6588df2cacc3102b8e78093ea5 (diff) | |
| download | prlg-81df52f6565c073f9638108a66304d0ecc6cac02.tar.gz prlg-81df52f6565c073f9638108a66304d0ecc6cac02.tar.bz2 | |
get lensy and classy
Diffstat (limited to 'app/Load.hs')
| -rw-r--r-- | app/Load.hs | 17 |
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] |
