aboutsummaryrefslogtreecommitdiff
path: root/src/Language/SimpleShell/Parser/Expr.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language/SimpleShell/Parser/Expr.hs')
-rw-r--r--src/Language/SimpleShell/Parser/Expr.hs24
1 files changed, 6 insertions, 18 deletions
diff --git a/src/Language/SimpleShell/Parser/Expr.hs b/src/Language/SimpleShell/Parser/Expr.hs
index 441e890..7687fb0 100644
--- a/src/Language/SimpleShell/Parser/Expr.hs
+++ b/src/Language/SimpleShell/Parser/Expr.hs
@@ -4,7 +4,7 @@
module Language.SimpleShell.Parser.Expr
( ExprParser
- , runExprParser
+ , ExprContext(..)
, exprP
, strongTermP
, strongTermP0_
@@ -14,7 +14,7 @@ where
import Language.SimpleShell.AST.Expr (Expr(..), TypedExpr)
import Language.SimpleShell.AST.Name (FunName, VarName)
-import Language.SimpleShell.AST.SimpleType (SimpleType(..), Typed, FunSig)
+import Language.SimpleShell.AST.SimpleType (SimpleType(..), FunSig)
import Language.SimpleShell.Parser.Common.Lexeme
( lexeme
, symbol
@@ -31,14 +31,12 @@ import Control.Monad.Combinators.FailExpr
import Control.Applicative ((<|>))
import Control.Monad (void)
-import Control.Monad.Reader (ask, ReaderT, runReaderT)
+import Control.Monad.Reader (ask, ReaderT)
import Control.Monad.Combinators (manyTill)
import Data.Foldable (asum)
-import Data.List (nub)
import Data.Map (Map)
-import qualified Data.Map as Map (empty, lookup, fromList)
+import qualified Data.Map as Map (lookup)
import Data.Text (Text, unpack)
-import Data.Tuple (swap)
import Text.Megaparsec (MonadParsec, takeWhile1P, oneOf, many)
import Text.Megaparsec.Char (char)
import qualified Text.Megaparsec.Char.Lexer as L (charLiteral, decimal)
@@ -49,21 +47,11 @@ type ExprParser = ReaderT ExprContext RootParser
data ExprContext = ExprContext
- { ctxVars :: Map VarName SimpleType
- , ctxFuns :: Map FunName FunSig
+ { ctxFuns :: Map FunName FunSig
+ , ctxVars :: Map VarName SimpleType
}
-runExprParser :: [Typed VarName] -> ExprParser a -> RootParser a
-runExprParser decls p =
- if length (nub names) == length names -- TODO: inefficient
- then runReaderT p (ExprContext vars Map.empty)
- else fail "Duplicate variable name."
- where
- names = map snd decls
- vars = Map.fromList $ map swap decls
-
-
lookupVar :: VarName -> ExprParser SimpleType
lookupVar varname = do
mt <- Map.lookup varname . ctxVars <$> ask