@@ -535,6 +535,7 @@ pSimpleExtExpr syn = do i <- getState
535535
536536pNoExtExpr syn =
537537 try (pApp syn)
538+ <|> pRecordSet syn
538539 <|> try (pSimpleExpr syn)
539540 <|> pLambda syn
540541 <|> pLet syn
@@ -761,6 +762,28 @@ pImplicitArg syn = do lchar '{'; n <- pName
761762pConstraintArg syn = do symbol "@{"; e <- pExpr syn; symbol "}"
762763 return (pconst e)
763764
765+pRecordSet syn
766+ = do lchar '{'
767+ fields <- sepBy1 pFieldSet (lchar ',')
768+ lchar '}'
769+ fc <- pfc
770+ rec <- option Nothing (do e <- pSimpleExpr syn; return (Just e))
771+ case rec of
772+ Nothing ->
773+ return (PLam (MN 0 "fldx") Placeholder
774+ (applyAll fc fields (PRef fc (MN 0 "fldx"))))
775+ Just v -> return (applyAll fc fields v)
776+ where pFieldSet = do n <- pfName; lchar '='
777+ e <- pExpr syn
778+ return (n, e)
779+ applyAll fc [] x = x
780+ applyAll fc ((n, e) : es) x
781+ = applyAll fc es (PApp fc (PRef fc (mkSet n)) [pexp e, pexp x])
782+
783+ mkSet (UN n) = UN ("set_" ++ n)
784+ mkSet (MN 0 n) = MN 0 ("set_" ++ n)
785+ mkSet (NS n s) = NS (mkSet n) s
786+
764787pTSig syn = do lchar ':'
765788 cs <- pConstList syn
766789 sc <- pExpr syn