- mapRn dupSigDeclErr dups `thenRn_`
- mapRn unknownSigErr not_this_group `thenRn_`
- (if not inst_decl then
- mapRn unknownSigErr spec_inst_sigs
- else
- returnRn []
- ) `thenRn_`
- mapRn (addErrRn.missingSigErr) un_sigd_binders `thenRn_`
-
- returnRn sigs' -- bad ones and all:
- -- we need bindings of *some* sort for every name
+ mapRn_ dupSigDeclErr dups `thenRn_`
+ mapRn_ unknownSigErr not_this_group `thenRn_`
+ mapRn_ (addWarnRn.missingSigWarn) un_sigd_binders `thenRn_`
+ returnRn (sigs', fvs)
+ -- bad ones and all:
+ -- we need bindings of *some* sort for every name
+
+-- We use lookupOccRn in the signatures, which is a little bit unsatisfactory
+-- because this won't work for:
+-- instance Foo T where
+-- {-# INLINE op #-}
+-- Baz.op = ...
+-- We'll just rename the INLINE prag to refer to whatever other 'op'
+-- is in scope. (I'm assuming that Baz.op isn't in scope unqualified.)
+-- Doesn't seem worth much trouble to sort this.
+
+renameSig lookup_occ_nm (Sig v ty src_loc)
+ = pushSrcLocRn src_loc $
+ lookup_occ_nm v `thenRn` \ new_v ->
+ rnHsSigType (quotes (ppr v)) ty `thenRn` \ (new_ty,fvs) ->
+ returnRn (Sig new_v new_ty src_loc, fvs `addOneFV` new_v)