@@ -535,6 +535,7 @@ pSimpleExtExpr syn = do i <- getState
536pNoExtExpr syn =
536pNoExtExpr syn =
537 try (pApp syn)
537 try (pApp syn)
538 <|> try (pSimpleExpr syn)
539 <|> try (pSimpleExpr syn)
539 <|> pLambda syn
540 <|> pLambda syn
540 <|> pLet syn
541 <|> pLet syn
@@ -761,6 +762,28 @@ pImplicitArg syn = do lchar '{'; n <- pName
761pConstraintArg syn = do symbol "@{"; e <- pExpr syn; symbol "}"
762pConstraintArg syn = do symbol "@{"; e <- pExpr syn; symbol "}"
762 return (pconst e)
763 return (pconst e)
767+ fields <- sepBy1 pFieldSet (lchar ',')
770+ rec <- option Nothing (do e <- pSimpleExpr syn; return (Just e))
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 '='
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])
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
764pTSig syn = do lchar ':'
787pTSig syn = do lchar ':'
765 cs <- pConstList syn
788 cs <- pConstList syn
766 sc <- pExpr syn
789 sc <- pExpr syn