mergo
[cc1516.git] / parse.icl
index 3679124..bdb6a77 100644 (file)
--- a/parse.icl
+++ b/parse.icl
@@ -70,16 +70,11 @@ parseStmt = parseIfStmt <|> parseWhileStmt <|>
                parseOneLine :: Parser Token [Stmt]
                parseOneLine = pure <$> parseStmt
 
-parseFunType :: Parser Token FunType
-parseFunType = satTok DoubleColonToken *>
-       (parseInOutType <|> ((FunType []) <$> parseVoidOrType))
+parseFunType :: Parser Token Type
+parseFunType = satTok DoubleColonToken *> parseFT
        where
-               parseInOutType :: Parser Token FunType
-               parseInOutType =  FunType <$> (some parseType <* satTok ArrowToken) <*> parseVoidOrType
-
-               parseVoidOrType :: Parser Token (Maybe Type)
-               parseVoidOrType = (satTok VoidToken *> pure Nothing) <|>
-                       (Just <$> parseType) <|> pure Nothing
+        parseFT :: Parser Token Type
+        parseFT = ((->>) <$> parseType <* satTok ArrowToken <*> parseFT) <|> parseType
 
 parseVarDecl :: Parser Token VarDecl
 parseVarDecl = liftM4 VarDecl
@@ -93,6 +88,7 @@ parseType =
        trans1 IntTypeToken IntType <|>
        trans1 CharTypeToken CharType <|>
        trans1 BoolTypeToken BoolType <|>
+    trans1 VoidToken VoidType <|>
        (ListType <$> (parseBSqBraces parseType)) <|>
        (TupleType <$> (parseTuple parseType)) <|>
        (IdType <$> parseIdent)