import RnTypes ( rnHsSigType, rnLHsType, rnHsTypeFVs,
rnLPat, rnPatsAndThen, patSigErr, checkPrecMatch )
import RnEnv ( bindLocatedLocalsRn, lookupLocatedBndrRn,
- lookupLocatedInstDeclBndr, newIPNameRn,
+ lookupInstDeclBndr, newIPNameRn,
lookupLocatedSigOccRn, bindPatSigTyVarsFV,
bindLocalFixities, bindSigTyVarsFV,
warnUnusedLocalBinds, mapFvRn, extendTyVarEnvFVRn,
)
import DynFlags ( DynFlag(..) )
-import Name ( Name, nameOccName, nameSrcLoc )
+import Name
import NameEnv
import NameSet
import PrelNames ( isUnboundName )
import RdrName ( RdrName, rdrNameOcc )
-import SrcLoc ( mkSrcSpan, Located(..), unLoc )
+import SrcLoc ( Located(..), unLoc )
import ListSetOps ( findDupsEq )
import BasicTypes ( RecFlag(..) )
import Digraph ( SCC(..), stronglyConnComp )
rnMethodBind cls sig_fn gen_tyvars (L loc (FunBind { fun_id = name, fun_infix = inf,
fun_matches = MatchGroup matches _ }))
= setSrcSpan loc $
- lookupLocatedInstDeclBndr cls name `thenM` \ sel_name ->
+ lookupInstDeclBndr cls name `thenM` \ sel_name ->
let plain_name = unLoc sel_name in
-- We use the selector name as the binder
ppr_sig (L loc sig) = ppr loc <> colon <+> ppr sig
unknownSigErr (L loc sig)
- = addErrAt loc $
- sep [ptext SLIT("Misplaced") <+> what_it_is <> colon, ppr sig]
+ = do { mod <- getModule
+ ; addErrAt loc $
+ vcat [sep [ptext SLIT("Misplaced") <+> what_it_is <> colon, ppr sig],
+ extra_stuff mod sig] }
where
what_it_is = hsSigDoc sig
+ extra_stuff mod (TypeSig (L _ n) _)
+ | nameIsLocalOrFrom mod n
+ = ptext SLIT("The type signature must be given where")
+ <+> quotes (ppr n) <+> ptext SLIT("is declared")
+ | otherwise
+ = ptext SLIT("You cannot give a type signature for an imported value")
+
+ extra_stuff mod other = empty
methodBindErr mbind
= hang (ptext SLIT("Pattern bindings (except simple variables) not allowed in instance declarations"))