@@ -414,8 +414,8 @@ parseInfixExpr = P.between tick tick parseValue
414parseOperatorSection :: TokenParser Expr
414parseOperatorSection :: TokenParser Expr
415parseOperatorSection = parens $ left <|> right
415parseOperatorSection = parens $ left <|> right
417− right = OperatorSection <$> parseInfixExpr <* indented <*> (Right <$> parseValueAtom)
417+ right = OperatorSection <$> parseInfixExpr <* indented <*> (Right <$> indexersAndAccessors)
418− left = flip OperatorSection <$> (Left <$> parseValueAtom) <* indented <*> parseInfixExpr
418+ left = flip OperatorSection <$> (Left <$> indexersAndAccessors) <* indented <*> parseInfixExpr
420parsePropertyUpdate :: TokenParser (String, Maybe Expr)
420parsePropertyUpdate :: TokenParser (String, Maybe Expr)
421parsePropertyUpdate = do
421parsePropertyUpdate = do
@@ -449,21 +449,25 @@ parseDoNotationElement = P.choice
449parseObjectGetter :: TokenParser Expr
449parseObjectGetter :: TokenParser Expr
450parseObjectGetter = ObjectGetter <$> (underscore *> C.indented *> dot *> C.indented *> (lname <|> stringLiteral))
450parseObjectGetter = ObjectGetter <$> (underscore *> C.indented *> dot *> C.indented *> (lname <|> stringLiteral))
452+-- | Expressions including indexers and record updates
453+indexersAndAccessors :: TokenParser Expr
454+indexersAndAccessors = C.buildPostfixParser postfixTable parseValueAtom
456+ postfixTable = [ parseAccessor
457+ , P.try . parseUpdaterBody . Just ]
453-- Parse a value
460-- Parse a value
455parseValue :: TokenParser Expr
462parseValue :: TokenParser Expr
456parseValue = withSourceSpan PositionedValue
463parseValue = withSourceSpan PositionedValue
457 (P.buildExpressionParser operators
464 (P.buildExpressionParser operators
458− . C.buildPostfixParser postfixTable2
465+ . C.buildPostfixParser postfixTable
459 $ indexersAndAccessors) P.<?> "expression"
466 $ indexersAndAccessors) P.<?> "expression"
461− indexersAndAccessors = C.buildPostfixParser postfixTable1 parseValueAtom
462− postfixTable1 = [ parseAccessor
463− , P.try . parseUpdaterBody . Just ]
464− postfixTable2 = [ \v -> P.try (flip App <$> (C.indented *> indexersAndAccessors)) <*> pure v
468+ postfixTable = [ \v -> P.try (flip App <$> (C.indented *> indexersAndAccessors)) <*> pure v
465− , \v -> flip (TypedValue True) <$> (P.try (C.indented *> doubleColon) *> parsePolyType) <*> pure v
469+ , \v -> flip (TypedValue True) <$> (P.try (C.indented *> doubleColon) *> parsePolyType) <*> pure v
467 operators = [ [ P.Prefix (P.try (C.indented *> symbol' "-") >> return UnaryMinus)
471 operators = [ [ P.Prefix (P.try (C.indented *> symbol' "-") >> return UnaryMinus)
469 , [ P.Infix (P.try (C.indented *> parseInfixExpr P.<?> "infix expression") >>= \ident ->
473 , [ P.Infix (P.try (C.indented *> parseInfixExpr P.<?> "infix expression") >>= \ident ->