@@ -95,15 +95,18 @@ parseValueAtom = C.indented *> P.choice (map P.try
9595 , C.parens parseValue ])
9696
9797parseValue :: P.Parsec String P.Column Value
98−parseValue = buildExpressionParser operators . C.buildPostfixParser postfixTable $ parseValueAtom
98+parseValue = buildExpressionParser operators . C.buildPostfixParser postfixTable2 $ indexersAndAccessors
9999 where
100− postfixTable = [ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
101− , Indexer <$> (C.indented *> C.squares parseValue)
102− , flip App <$> (C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma)))
103− , flip TypedValue <$> (P.try $ C.lexeme (C.indented *> P.string "::") *> parsePolyType) ]
100+ indexersAndAccessors = C.buildPostfixParser postfixTable1 $ parseValueAtom
101+ postfixTable1 = [ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
102+ , Indexer <$> (C.indented *> C.squares parseValue) ]
103+ postfixTable2 = [ C.indented *> indexersAndAccessors >>= \t2 -> return (\t1 -> App t1 [t2])
104+ , flip App <$> (C.indented *> C.parens (parseValue `P.sepBy` (C.indented *> C.comma)))
105+ , flip TypedValue <$> (P.try $ C.lexeme (C.indented *> P.string "::") *> parsePolyType) ]
104106 operators = [ [ Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "!") >> return (Unary Not)
105107 , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "~") >> return (Unary BitwiseNot)
106− , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "-") >> return (Unary Negate) ]
108+ , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "-") >> return (Unary Negate)
109+ , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "+") >> return id ]
107110 , [ Infix (C.lexeme (P.try (C.indented *> C.parseIdentInfix) >>= \ident -> return $ \t1 t2 -> App (App (Var ident) [t1]) [t2])) AssocRight ]
108111 , [ Infix (C.lexeme (P.try $ C.indented *> C.reservedOp "<=") >> return (Binary LessThanOrEqualTo)) AssocRight
109112 , Infix (C.lexeme (P.try $ C.indented *> C.reservedOp ">=") >> return (Binary GreaterThanOrEqualTo)) AssocRight ]