\begin{code}
module RnBinds (
rnTopBinds, rnTopMonoBinds,
- rnMethodBinds, renameSigs,
+ rnMethodBinds, renameSigs, renameSigsFVs,
rnBinds,
unknownSigErr
) where
import RnEnv ( bindLocatedLocalsRn, lookupBndrRn,
lookupGlobalOccRn, lookupSigOccRn,
warnUnusedLocalBinds, mapFvRn, extendTyVarEnvFVRn,
- FreeVars, emptyFVs, plusFV, plusFVs, unitFV, addOneFV
)
import CmdLineOpts ( DynFlag(..) )
import Digraph ( stronglyConnComp, SCC(..) )
-import Name ( OccName, Name, nameOccName )
+import Name ( OccName, Name, nameOccName, nameSrcLoc )
import NameSet
import RdrName ( RdrName, rdrNameOcc )
import BasicTypes ( RecFlag(..) )
let
bndr_name_set = mkNameSet binder_names
in
- renameSigs (okBindSig bndr_name_set) sigs `thenRn` \ (siglist, sig_fvs) ->
- doptRn Opt_WarnMissingSigs `thenRn` \ warnMissing ->
+ renameSigsFVs (okBindSig bndr_name_set) sigs `thenRn` \ (siglist, sig_fvs) ->
+ doptRn Opt_WarnMissingSigs `thenRn` \ warnMissing ->
let
type_sig_vars = [n | Sig n _ _ <- siglist]
un_sigd_binders | warnMissing = nameSetToList (delListFromNameSet
bndr_name_set type_sig_vars)
| otherwise = []
in
- mapRn_ (addWarnRn.missingSigWarn) un_sigd_binders `thenRn_`
+ mapRn_ missingSigWarn un_sigd_binders `thenRn_`
rn_mono_binds siglist mbinds `thenRn` \ (final_binds, bind_fvs) ->
returnRn (final_binds, bind_fvs `plusFV` sig_fvs)
binder_set = mkNameSet new_mbinders
in
-- Rename the signatures
- renameSigs (okBindSig binder_set) sigs `thenRn` \ (siglist, sig_fvs) ->
+ renameSigsFVs (okBindSig binder_set) sigs `thenRn` \ (siglist, sig_fvs) ->
-- Report the fixity declarations in this group that
-- don't refer to any of the group's binders.
signatures. We'd only need this if we wanted to report unused tyvars.
\begin{code}
+renameSigsFVs ok_sig sigs
+ = renameSigs ok_sig sigs `thenRn` \ sigs' ->
+ returnRn (sigs', hsSigsFVs sigs')
+
renameSigs :: (RenamedSig -> Bool) -- OK-sig predicate
-> [RdrNameSig]
- -> RnMS ([RenamedSig], FreeVars)
+ -> RnMS [RenamedSig]
-renameSigs ok_sig []
- = returnRn ([], emptyFVs) -- Common shortcut
+renameSigs ok_sig [] = returnRn []
renameSigs ok_sig sigs
= -- Rename the signatures
(goods, bads) = partition ok_sig in_scope
in
mapRn_ unknownSigErr bads `thenRn_`
- returnRn (goods, hsSigFVs goods)
+ returnRn goods
-- We use lookupSigOccRn in the signatures, which is a little bit unsatisfactory
-- because this won't work for:
(what_it_is, loc) = hsSigDoc sig
missingSigWarn var
- = sep [ptext SLIT("definition but no type signature for"), quotes (ppr var)]
+ = pushSrcLocRn (nameSrcLoc var) $
+ addWarnRn (sep [ptext SLIT("Definition but no type signature for"), quotes (ppr var)])
methodBindErr mbind
= hang (ptext SLIT("Can't handle multiple methods defined by one pattern binding"))