parseFunType = satTok DoubleColonToken *> parseFT
where
parseFT :: Parser Token Type
- parseFT = (liftM2 (->>)
- ((parseBBraces parseFT <|> parseType) <* satTok ArrowToken)
- parseFT) <|> parseType
+ parseFT = (liftM2 (->>) (parseSF <* satTok ArrowToken) (parseFT)) <|>
+ parseSF
+ parseSF :: Parser Token Type
+ parseSF = parseBBraces parseFT <|> parseType
parseVarDecl :: Parser Token VarDecl
parseVarDecl = liftM4 VarDecl
parseBasicExpr :: Parser Token Expr
parseBasicExpr = peekPos >>= \pos ->
(TupleExpr pos <$> (parseTuple parseExpr)) <|>
- (parseFunCall >>= \(ident, args)->parseFieldSelectors >>= \fs->
- pure $ FunExpr pos ident args fs) <|>
parseBBraces parseExpr <|>
trans1 EmptyListToken (EmptyListExpr pos) <|>
trans1 TrueToken (BoolExpr pos True) <|>
trans2 (NumberToken zero) (\(NumberToken i)->IntExpr pos i) <|>
trans2 (CharToken zero) (\(CharToken c)->CharExpr pos c) <|>
(Op1Expr pos <$> parseOp1 <*> parseExpr) <|>
+ (parseFunCall >>= \(ident, args)->parseFieldSelectors >>= \fs->
+ pure $ FunExpr pos ident args fs) <|>
(VarExpr pos <$> parseVarDef)
parseFunCall :: Parser Token (String, [Expr])
-parseFunCall = tuple <$> parseIdent <*> (
- (parseBBraces $ parseSepList CommaToken parseExpr) <|> pure [])
+parseFunCall = liftM2 tuple
+ parseIdent
+ (parseBBraces $ parseSepList CommaToken parseExpr)
parseVarDef :: Parser Token VarDef
parseVarDef = liftM2 VarDef parseIdent parseFieldSelectors