- trans1 EmptyListToken EmptyListExpr <|>
- trans1 TrueToken (BoolExpr True) <|>
- trans1 FalseToken (BoolExpr False) <|>
- trans2 (NumberToken zero) (\(NumberToken i)->IntExpr i) <|>
- trans2 (CharToken zero) (\(CharToken c)->CharExpr c) <|>
- (Op1Expr <$> parseOp1 <*> parseExpr) <|>
- (VarExpr <$> parseVarDef)
-
-parseFunCall :: Parser Token FunCall
-parseFunCall = FunCall <$> parseIdent <*> (parseBBraces $ parseSepList CommaToken parseExpr)
+ trans1 EmptyListToken (EmptyListExpr pos) <|>
+ trans1 TrueToken (BoolExpr pos True) <|>
+ trans1 FalseToken (BoolExpr pos False) <|>
+ trans2 (NumberToken zero) (\(NumberToken i)->IntExpr pos i) <|>
+ trans2 (CharToken zero) (\(CharToken c)->CharExpr pos c) <|>
+ (Op1Expr pos <$> parseOp1 <*> parseExpr) <|>
+ (parseFunCall >>= \(ident, args, fs)->
+ pure $ FunExpr pos ident args fs) <|>
+ (VarExpr pos <$> parseVarDef)
+
+parseFunCall :: Parser Token (String, [Expr], [FieldSelector])
+parseFunCall = liftM3 (\x y z->(x, y, z))
+ parseIdent
+ (parseBBraces $ parseSepList CommaToken parseExpr)
+ parseFieldSelectors