aboutsummaryrefslogtreecommitdiff
path: root/src/Language/SimpleShell/Parser/Function.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language/SimpleShell/Parser/Function.hs')
-rw-r--r--src/Language/SimpleShell/Parser/Function.hs24
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_