@@ -93,27 +93,22 @@ parensTerm = parens $ choice
9393 ]
9494
9595recordTerm :: IParser Expr
96−recordTerm = brackets $ do
97− Record <$> (mapM extract =<< commaSep field)
96+recordTerm = brackets $ choice [ modify, record ]
9897 where field = do
99− fDefs <- (:) <$> (PVar <$> lowVar) <*> spacePrefix patternTerm
100− whitespace
101− e <- string "=" >> whitespace >> expr
102− flattenPatterns fDefs e
98+ fDefs <- (:) <$> (PVar <$> lowVar) <*> spacePrefix patternTerm
99+ whitespace
100+ e <- string "=" >> whitespace >> expr
101+ flattenPatterns fDefs e
103102 extract [ FnDef f args exp ] = return (f,args,exp)
104103 extract _ = fail "Improperly formed record field."
105−{--
106− record <- expr
107− whitespace >> string "|" >> whitespace
108− label <- lowVar
109− whitespace
110− op <- (string "<-" <|> string "=")
111− whitespace
112− e <- expr
113− case op of
114− "<-" ->
115− "=" ->
116−--}
104+ record = Record <$> (mapM extract =<< commaSep field)
105+ modify = do
106+ record <- try $ do record <- addContext (Var <$> lowVar)
107+ whitespace >> string "|" >> whitespace
108+ return record
109+ label <- lowVar
110+ whitespace >> string "<-" >> whitespace
111+ Modify record label <$> expr
117112
118113term :: IParser CExpr
119114term = addContext (choice [ numTerm, strTerm, chrTerm, listTerm, accessor ])