@@ -126,6 +126,10 @@ parsePropertyUpdate = do
126126 value <- C.indented *> parseValue
127127 return (name, value)
128128
129+parseAccessor :: Value -> P.Parsec String ParseState Value
130+parseAccessor (Constructor _) = P.unexpected "constructor"
131+parseAccessor obj = Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier) <*> pure obj
132+
129133parseValue :: P.Parsec String ParseState Value
130134parseValue =
131135 (buildExpressionParser operators
@@ -133,11 +137,11 @@ parseValue =
133137 $ indexersAndAccessors) P.<?> "expression"
134138 where
135139 indexersAndAccessors = C.buildPostfixParser postfixTable1 parseValueAtom
136− postfixTable1 = [ Accessor <$> (C.indented *> C.dot *> C.indented *> C.identifier)
137− , P.try $ flip ObjectUpdate <$> (C.indented *> C.braces (C.commaSep1 (C.indented *> parsePropertyUpdate))) ]
138− postfixTable2 = [ P.try (C.indented *> indexersAndAccessors >>= \t2 -> return (\t1 -> App t1 [t2]))
139− , P.try $ flip App <$> (C.indented *> C.parens (C.commaSep parseValue))
140− , flip TypedValue <$> (P.try (C.lexeme (C.indented *> P.string "::")) *> parsePolyType) ]
140+ postfixTable1 = [ parseAccessor
141+ , \v -> P.try $ flip ObjectUpdate <$> (C.indented *> C.braces (C.commaSep1 (C.indented *> parsePropertyUpdate))) <*> pure v ]
142+ postfixTable2 = [ \v -> P.try (C.indented *> indexersAndAccessors >>= \t2 -> return (\t1 -> App t1 [t2])) <*> pure v
143+ , \v -> P.try $ flip App <$> (C.indented *> C.parens (C.commaSep parseValue)) <*> pure v
144+ , \v -> flip TypedValue <$> (P.try (C.lexeme (C.indented *> P.string "::")) *> parsePolyType) <*> pure v ]
141145 operators = [ [ Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "!") >> return (Unary Not)
142146 , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "~") >> return (Unary BitwiseNot)
143147 , Prefix $ C.lexeme (P.try $ C.indented *> C.reservedOp "-") >> return (Unary Negate)