@@ -95,14 +95,13 @@ parseValueAtom = C.indented *> P.choice (map P.try
95 , C.parens parseValue ])
95 , C.parens parseValue ])
97parseValue :: P.Parsec String P.Column Value
97parseValue :: P.Parsec String P.Column Value
98−parseValue = buildExpressionParser operators $ C.fold (C.lexeme typedValue) (C.lexeme funArgs) App
98+parseValue = buildExpressionParser operators . C.buildPostfixParser postfixTable $ parseValueAtom
100− typedValue = C.augment parseValueAtom parseTypeAnnotation TypedValue
100+ postfixTable = [ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
101+ , Indexer <$> (C.indented *> C.squares parseValue)
101− funArgs = C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma))
102+ , flip App <$> (C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma)))
102− parseTypeAnnotation = P.try $ C.lexeme (C.indented *> P.string "::") *> parsePolyType
103+ , flip TypedValue <$> (P.try $ C.lexeme (C.indented *> P.string "::") *> parsePolyType) ]
103− operators = [ [ Postfix $ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
104− , Postfix $ Indexer <$> (C.indented *> C.squares parseValue) ]
105− , [ Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "!") >> return (Unary Not)
104+ operators = [ [ Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "!") >> return (Unary Not)
106 , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "~") >> return (Unary BitwiseNot)
105 , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "~") >> return (Unary BitwiseNot)
107 , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "-") >> return (Unary Negate) ]
106 , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "-") >> return (Unary Negate) ]
108 , [ Infix (C.lexeme (P.try (C.indented *> C.parseIdentInfix) >>= \ident -> return $ \t1 t2 -> App (App (Var ident) [t1]) [t2])) AssocRight ]
107 , [ Infix (C.lexeme (P.try (C.indented *> C.parseIdentInfix) >>= \ident -> return $ \t1 t2 -> App (App (Var ident) [t1]) [t2])) AssocRight ]