@@ -504,21 +504,12 @@ expression (A.A ann sourceExpression) =
504504 <*> return field
505505
506506 Src.Update record fields ->
507− Src.Update
508− <$> expression record
509− <*> traverse second fields
507+ do checkDuplicateFields ann fields
508+ Src.Update <$> expression record <*> traverse second fields
510509
511510 Src.Record fields ->
512− let
513− checkDups seenFields (field,_) =
514− if Set.member field seenFields then
515− Result.throw ann (Error.DuplicateFieldName field)
516−
517− else
518− return (Set.insert field seenFields)
519− in
520− do foldM_ checkDups Set.empty fields
521− Src.Record <$> traverse second fields
511+ do checkDuplicateFields ann fields
512+ Src.Record <$> traverse second fields
522513
523514 Src.Let defs body ->
524515 Src.Let
@@ -539,6 +530,18 @@ both (expr1, expr2) =
539530 (,) <$> expression expr1 <*> expression expr2
540531
541532
533+checkDuplicateFields :: R.Region -> [(A.Located String, a)] -> Result wrn ()
534+checkDuplicateFields recordRegion fields =
535+ let
536+ checkDups seenFields ( A.A region field, _ ) =
537+ if Set.member field seenFields then
538+ Result.throw recordRegion (Error.DuplicateFieldName region field)
539+ else
540+ Result.ok (Set.insert field seenFields)
541+ in
542+ foldM_ checkDups Set.empty fields
543+
544+
542545
543546-- VALIDATE PATTERNS
544547