diff options
Diffstat (limited to 'src/Language/SimpleShell/Parser/Function.hs')
-rw-r--r-- | src/Language/SimpleShell/Parser/Function.hs | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/Language/SimpleShell/Parser/Function.hs b/src/Language/SimpleShell/Parser/Function.hs index f7a63f8..667a601 100644 --- a/src/Language/SimpleShell/Parser/Function.hs +++ b/src/Language/SimpleShell/Parser/Function.hs @@ -11,8 +11,12 @@ import Language.SimpleShell.AST.Expr (Expr) import Language.SimpleShell.AST.Function (Function(..)) import Language.SimpleShell.AST.Name (FunName, VarName) import Language.SimpleShell.AST.SimpleType (SimpleType, FunSig, Typed) -import Language.SimpleShell.Parser (Parser, symbol, declareVars) -import Language.SimpleShell.Parser.Expr (strongTermP, strongTermP_) +import Language.SimpleShell.Parser (MainParser, symbol) +import Language.SimpleShell.Parser.Expr + ( runExprParser + , strongTermP + , strongTermP_ + ) import Language.SimpleShell.Parser.Name (nameP, keyword) import Language.SimpleShell.Parser.SimpleType (simpleTypeP, forceType) @@ -20,7 +24,7 @@ import Control.Applicative ((<|>)) import Text.Megaparsec (sepBy) -functionPrefixP :: Parser (SimpleType, FunName, [Typed VarName]) +functionPrefixP :: MainParser (SimpleType, FunName, [Typed VarName]) functionPrefixP = do keyword "function" t' <- simpleTypeP @@ -29,7 +33,7 @@ functionPrefixP = do symbol "=" return (t', fname, params) -functionP :: Parser Function +functionP :: MainParser Function functionP = do (t', fname, params) <- functionPrefixP let vars = map snd params @@ -37,7 +41,7 @@ functionP = do return $ Function fname vars body -- | First-pass function parser. -functionP0 :: Parser (FunName, FunSig) +functionP0 :: MainParser (FunName, FunSig) functionP0 = do (t', fname, params) <- functionPrefixP let ts = map fst params @@ -45,11 +49,11 @@ functionP0 = do return (fname, (t', ts)) -paramP :: Parser (Typed VarName) +paramP :: MainParser (Typed VarName) paramP = (,) <$> simpleTypeP <*> nameP -bodyP :: [Typed VarName] -> Parser (Typed Expr) -bodyP params = declareVars params strongTermP +bodyP :: [Typed VarName] -> MainParser (Typed Expr) +bodyP params = runExprParser params strongTermP -bodyP_ :: Parser () -bodyP_ = strongTermP_ +bodyP_ :: MainParser () +bodyP_ = runExprParser [] strongTermP_ |