import TcBinds ( tcSpecSigs )
import TcClassDcl ( tcMethodBind, badMethodErr )
import TcMonad
-import TcMType ( tcInstTyVars, checkValidTheta, checkValidInstHead, instTypeErr,
+import TcMType ( tcInstSigTyVars, checkValidTheta, checkValidInstHead, instTypeErr,
UserTypeCtxt(..), SourceTyCtxt(..) )
-import TcType ( tcSplitDFunTy, mkClassPred, mkTyVarTy,
- tcSplitSigmaTy, tcSplitPredTy_maybe, getClassPredTys
+import TcType ( tcSplitDFunTy, mkClassPred, mkTyVarTy, mkTyVarTys,
+ tcSplitSigmaTy, tcSplitPredTy_maybe, getClassPredTys,
+ TyVarDetails(..)
)
import Inst ( InstOrigin(..),
newDicts, instToId,
let
(inst_tyvars, dfun_theta, clas, inst_tys) = tcSplitDFunTy (idType dfun_id)
in
- tcInstTyVars inst_tyvars `thenNF_Tc` \ (inst_tyvars', _, tenv) ->
+ tcInstSigTyVars InstTv inst_tyvars `thenNF_Tc` \ inst_tyvars' ->
let
+ tenv = mkTopTyVarSubst inst_tyvars (mkTyVarTys inst_tyvars')
inst_tys' = map (substTy tenv) inst_tys
dfun_theta' = substTheta tenv dfun_theta
origin = InstanceDeclOrigin
(class_tyvars, sc_theta, _, op_items) = classBigSig clas
- dm_ids = [dm_id | (_, DefMeth dm_id) <- op_items]
sel_names = [idName sel_id | (sel_id, _) <- op_items]
-- Instantiate the super-class context with inst_tys
-- The type variable from the dict fun actually scope
-- over the bindings. They were gotten from
-- the original instance declaration
- tcExtendGlobalValEnv dm_ids (
- -- Default-method Ids may be mentioned in synthesised RHSs
+
+ -- Default-method Ids may be mentioned in synthesised RHSs,
+ -- but they'll already be in the environment.
mapAndUnzip3Tc (tcMethodBind clas origin inst_tyvars' inst_tys'
dfun_theta'
monobinds uprags True)
op_items
- )) `thenTc` \ (method_binds_s, insts_needed_s, meth_insts) ->
+ ) `thenTc` \ (method_binds_s, insts_needed_s, meth_insts) ->
-- Deal with SPECIALISE instance pragmas by making them
-- look like SPECIALISE pragmas for the dfun