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