+%************************************************************************
+%* *
+\subsubsection{@Rbinds@s and @Rpats@s: in record expressions}
+%* *
+%************************************************************************
+
+\begin{code}
+rnRbinds str rbinds
+ = mapRn field_dup_err dup_fields `thenRn_`
+ mapAndUnzipRn rn_rbind rbinds `thenRn` \ (rbinds', fvRbind_s) ->
+ returnRn (rbinds', unionManyUniqSets fvRbind_s)
+ where
+ (_, dup_fields) = removeDups cmp [ f | (f,_,_) <- rbinds ]
+
+ field_dup_err dups = getSrcLocRn `thenRn` \ src_loc ->
+ addErrRn (dupFieldErr str src_loc dups)
+
+ rn_rbind (field, expr, pun)
+ = lookupField field `thenRn` \ fieldname ->
+ rnExpr expr `thenRn` \ (expr', fvExpr) ->
+ returnRn ((fieldname, expr', pun), fvExpr)
+
+rnRpats rpats
+ = mapRn field_dup_err dup_fields `thenRn_`
+ mapRn rn_rpat rpats
+ where
+ (_, dup_fields) = removeDups cmp [ f | (f,_,_) <- rpats ]
+
+ field_dup_err dups = getSrcLocRn `thenRn` \ src_loc ->
+ addErrRn (dupFieldErr "pattern" src_loc dups)
+
+ rn_rpat (field, pat, pun)
+ = lookupField field `thenRn` \ fieldname ->
+ rnPat pat `thenRn` \ pat' ->
+ returnRn (fieldname, pat', pun)