aboutsummaryrefslogtreecommitdiff
path: root/src/Language
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language')
-rw-r--r--src/Language/SimpleShell/Parser.hs8
-rw-r--r--src/Language/SimpleShell/Parser/Expr.hs8
-rw-r--r--src/Language/SimpleShell/Parser/Function.hs15
3 files changed, 13 insertions, 18 deletions
diff --git a/src/Language/SimpleShell/Parser.hs b/src/Language/SimpleShell/Parser.hs
index 30554a3..5f536ed 100644
--- a/src/Language/SimpleShell/Parser.hs
+++ b/src/Language/SimpleShell/Parser.hs
@@ -2,16 +2,13 @@
{-# LANGUAGE FlexibleContexts #-}
module Language.SimpleShell.Parser
- ( MainParser
- , lexeme
+ ( lexeme
, symbol
, commentFirstChars
)
where
-import Language.SimpleShell.Parser.Root (RootParser)
-
import Control.Monad (void)
import Data.Text (Text)
import Text.Megaparsec (MonadParsec)
@@ -25,9 +22,6 @@ import qualified Text.Megaparsec.Char.Lexer as L
)
-type MainParser = RootParser
-
-
-- Must be kept in sync with 'commentFirstChars'.
sc :: (MonadParsec e Text m) => m ()
sc = L.space
diff --git a/src/Language/SimpleShell/Parser/Expr.hs b/src/Language/SimpleShell/Parser/Expr.hs
index db8a493..ab27555 100644
--- a/src/Language/SimpleShell/Parser/Expr.hs
+++ b/src/Language/SimpleShell/Parser/Expr.hs
@@ -15,12 +15,12 @@ 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.Parser
- ( MainParser
- , lexeme
+ ( lexeme
, symbol
, commentFirstChars
)
import Language.SimpleShell.Parser.Name (nameP, keyword)
+import Language.SimpleShell.Parser.Root (RootParser)
import Language.SimpleShell.Parser.SimpleType (forceType)
import Control.Monad.Combinators.FailExpr
( Associativity(..)
@@ -43,7 +43,7 @@ import Text.Megaparsec.Char (char)
import qualified Text.Megaparsec.Char.Lexer as L (charLiteral, decimal)
-type ExprParser = ReaderT ExprContext MainParser
+type ExprParser = ReaderT ExprContext RootParser
type Parser = ExprParser
@@ -53,7 +53,7 @@ data ExprContext = ExprContext
}
-runExprParser :: [Typed VarName] -> ExprParser a -> MainParser a
+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)
diff --git a/src/Language/SimpleShell/Parser/Function.hs b/src/Language/SimpleShell/Parser/Function.hs
index 667a601..0753952 100644
--- a/src/Language/SimpleShell/Parser/Function.hs
+++ b/src/Language/SimpleShell/Parser/Function.hs
@@ -11,20 +11,21 @@ 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 (MainParser, symbol)
+import Language.SimpleShell.Parser (symbol)
import Language.SimpleShell.Parser.Expr
( runExprParser
, strongTermP
, strongTermP_
)
import Language.SimpleShell.Parser.Name (nameP, keyword)
+import Language.SimpleShell.Parser.Root (RootParser)
import Language.SimpleShell.Parser.SimpleType (simpleTypeP, forceType)
import Control.Applicative ((<|>))
import Text.Megaparsec (sepBy)
-functionPrefixP :: MainParser (SimpleType, FunName, [Typed VarName])
+functionPrefixP :: RootParser (SimpleType, FunName, [Typed VarName])
functionPrefixP = do
keyword "function"
t' <- simpleTypeP
@@ -33,7 +34,7 @@ functionPrefixP = do
symbol "="
return (t', fname, params)
-functionP :: MainParser Function
+functionP :: RootParser Function
functionP = do
(t', fname, params) <- functionPrefixP
let vars = map snd params
@@ -41,7 +42,7 @@ functionP = do
return $ Function fname vars body
-- | First-pass function parser.
-functionP0 :: MainParser (FunName, FunSig)
+functionP0 :: RootParser (FunName, FunSig)
functionP0 = do
(t', fname, params) <- functionPrefixP
let ts = map fst params
@@ -49,11 +50,11 @@ functionP0 = do
return (fname, (t', ts))
-paramP :: MainParser (Typed VarName)
+paramP :: RootParser (Typed VarName)
paramP = (,) <$> simpleTypeP <*> nameP
-bodyP :: [Typed VarName] -> MainParser (Typed Expr)
+bodyP :: [Typed VarName] -> RootParser (Typed Expr)
bodyP params = runExprParser params strongTermP
-bodyP_ :: MainParser ()
+bodyP_ :: RootParser ()
bodyP_ = runExprParser [] strongTermP_