diff options
-rw-r--r-- | src/Language/SimpleShell/Parser/Expr.hs | 6 | ||||
-rw-r--r-- | src/Language/SimpleShell/Parser/Function.hs | 6 | ||||
-rw-r--r-- | src/Language/SimpleShell/Parser/Name.hs | 11 |
3 files changed, 7 insertions, 16 deletions
diff --git a/src/Language/SimpleShell/Parser/Expr.hs b/src/Language/SimpleShell/Parser/Expr.hs index 05120ce..1c782bc 100644 --- a/src/Language/SimpleShell/Parser/Expr.hs +++ b/src/Language/SimpleShell/Parser/Expr.hs @@ -17,7 +17,7 @@ import Language.SimpleShell.Parser , lookupVar , lookupFun ) -import Language.SimpleShell.Parser.Name (funNameP, varNameP, keyword) +import Language.SimpleShell.Parser.Name (nameP, keyword) import Language.SimpleShell.Parser.SimpleType (forceType) import Control.Monad.Combinators.FailExpr ( Associativity(..) @@ -70,13 +70,13 @@ literalP varP :: Parser TypedExpr varP = do _ <- char '$' - x <- varNameP + x <- nameP t <- lookupVar x return (t, Var x) funP :: Parser TypedExpr funP = do - fname <- funNameP + fname <- nameP (t', ts) <- lookupFun fname args <- mapM (strongTermP' "Type mismatch with function signature.") ts return (t', FunCall fname args) diff --git a/src/Language/SimpleShell/Parser/Function.hs b/src/Language/SimpleShell/Parser/Function.hs index 29ebbaa..26f5a5c 100644 --- a/src/Language/SimpleShell/Parser/Function.hs +++ b/src/Language/SimpleShell/Parser/Function.hs @@ -12,7 +12,7 @@ import Language.SimpleShell.AST.Name (VarName) import Language.SimpleShell.AST.SimpleType (FunSig, Typed) import Language.SimpleShell.Parser (Parser, symbol, declareVars) import Language.SimpleShell.Parser.Expr (strongTermP) -import Language.SimpleShell.Parser.Name (funNameP, varNameP, keyword) +import Language.SimpleShell.Parser.Name (nameP, keyword) import Language.SimpleShell.Parser.SimpleType (simpleTypeP, forceType) import Control.Applicative ((<|>)) @@ -23,14 +23,14 @@ functionP :: Parser (FunSig, Function) functionP = do keyword "function" t' <- simpleTypeP - fname <- funNameP + fname <- nameP params <- symbol "(" *> paramP `sepBy` symbol "," <* symbol ")" let (ts, vars) = unzip params body <- forceType t' (bodyP params) <|> fail "Function return type mismatch." return ((t', ts), Function fname vars body) paramP :: Parser (Typed VarName) -paramP = (,) <$> simpleTypeP <*> varNameP +paramP = (,) <$> simpleTypeP <*> nameP bodyP :: [Typed VarName] -> Parser (Typed Expr) bodyP params = declareVars params strongTermP diff --git a/src/Language/SimpleShell/Parser/Name.hs b/src/Language/SimpleShell/Parser/Name.hs index 635d987..14f4d2e 100644 --- a/src/Language/SimpleShell/Parser/Name.hs +++ b/src/Language/SimpleShell/Parser/Name.hs @@ -1,12 +1,10 @@ module Language.SimpleShell.Parser.Name - ( varNameP - , funNameP + ( nameP , keyword ) where -import Language.SimpleShell.AST.Name (FunName, VarName) import Language.SimpleShell.Parser (Parser, lexeme) import Control.Monad (void) @@ -31,10 +29,3 @@ nameP = keyword :: Text -> Parser () keyword kw = void $ lexeme $ try $ string kw <* notFollowedBy (satisfy isNameChar) - - -varNameP :: Parser VarName -varNameP = nameP - -funNameP :: Parser FunName -funNameP = nameP |