2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
6 TcInstDecls: Typechecking instance declarations
9 module TcInstDcls ( tcInstDecls1, tcInstDecls2 ) where
24 import RnEnv ( lookupGlobalOccRn )
25 import RnSource ( addTcgDUs )
53 #include "HsVersions.h"
56 Typechecking instance declarations is done in two passes. The first
57 pass, made by @tcInstDecls1@, collects information to be used in the
60 This pre-processed info includes the as-yet-unprocessed bindings
61 inside the instance declaration. These are type-checked in the second
62 pass, when the class-instance envs and GVE contain all the info from
63 all the instance and value decls. Indeed that's the reason we need
64 two passes over the instance decls.
67 Note [How instance declarations are translated]
68 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69 Here is how we translation instance declarations into Core
73 op1, op2 :: Ix b => a -> b -> b
77 {-# INLINE [2] op1 #-}
81 op1,op2 :: forall a. C a => forall b. Ix b => a -> b -> b
85 -- Default methods get the 'self' dictionary as argument
86 -- so they can call other methods at the same type
87 -- Default methods get the same type as their method selector
88 $dmop2 :: forall a. C a => forall b. Ix b => a -> b -> b
89 $dmop2 = /\a. \(d:C a). /\b. \(d2: Ix b). <dm-rhs>
90 -- NB: type variables 'a' and 'b' are *both* in scope in <dm-rhs>
91 -- Note [Tricky type variable scoping]
93 -- A top-level definition for each instance method
94 -- Here op1_i, op2_i are the "instance method Ids"
95 {-# INLINE [2] op1_i #-} -- From the instance decl bindings
96 op1_i, op2_i :: forall a. C a => forall b. Ix b => [a] -> b -> b
97 op1_i = /\a. \(d:C a).
100 -- Note [Subtle interaction of recursion and overlap]
102 local_op1 :: forall b. Ix b => [a] -> b -> b
104 -- Source code; run the type checker on this
105 -- NB: Type variable 'a' (but not 'b') is in scope in <rhs>
106 -- Note [Tricky type variable scoping]
110 op2_i = /\a \d:C a. $dmop2 [a] (df_i a d)
112 -- The dictionary function itself
113 {-# INLINE df_i #-} -- Always inline dictionary functions
114 df_i :: forall a. C a -> C [a]
115 df_i = /\a. \d:C a. letrec d' = MkC (op1_i a d)
118 -- But see Note [Default methods in instances]
119 -- We can't apply the type checker to the default-method call
121 * The dictionary function itself is inlined as vigorously as we
122 possibly can, so that we expose that dictionary constructor to
123 selectors as much as poss. That is why the op_i stuff is in
124 *separate* bindings, so that the df_i binding is small enough
125 to inline. See Note [Inline dfuns unconditionally].
127 * Note that df_i may be mutually recursive with both op1_i and op2_i.
128 It's crucial that df_i is not chosen as the loop breaker, even
129 though op1_i has a (user-specified) INLINE pragma.
130 Not even once! Else op1_i, op2_i may be inlined into df_i.
132 * Instead the idea is to inline df_i into op1_i, which may then select
133 methods from the MkC record, and thereby break the recursion with
134 df_i, leaving a *self*-recurisve op1_i. (If op1_i doesn't call op at
135 the same type, it won't mention df_i, so there won't be recursion in
138 * If op1_i is marked INLINE by the user there's a danger that we won't
139 inline df_i in it, and that in turn means that (since it'll be a
140 loop-breaker because df_i isn't), op1_i will ironically never be
141 inlined. We need to fix this somehow -- perhaps allowing inlining
142 of INLINE functions inside other INLINE functions.
144 Note [Subtle interaction of recursion and overlap]
145 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
147 class C a where { op1,op2 :: a -> a }
148 instance C a => C [a] where
149 op1 x = op2 x ++ op2 x
151 intance C [Int] where
154 When type-checking the C [a] instance, we need a C [a] dictionary (for
155 the call of op2). If we look up in the instance environment, we find
156 an overlap. And in *general* the right thing is to complain (see Note
157 [Overlapping instances] in InstEnv). But in *this* case it's wrong to
158 complain, because we just want to delegate to the op2 of this same
161 Why is this justified? Because we generate a (C [a]) constraint in
162 a context in which 'a' cannot be instantiated to anything that matches
163 other overlapping instances, or else we would not be excecuting this
164 version of op1 in the first place.
166 It might even be a bit disguised:
168 nullFail :: C [a] => [a] -> [a]
169 nullFail x = op2 x ++ op2 x
171 instance C a => C [a] where
174 Precisely this is used in package 'regex-base', module Context.hs.
175 See the overlapping instances for RegexContext, and the fact that they
176 call 'nullFail' just like the example above. The DoCon package also
177 does the same thing; it shows up in module Fraction.hs
179 Conclusion: when typechecking the methods in a C [a] instance, we want
180 to have C [a] available. That is why we have the strange local
181 definition for 'this' in the definition of op1_i in the example above.
182 We can typecheck the defintion of local_op1, and when doing tcSimplifyCheck
183 we supply 'this' as a given dictionary. Only needed, though, if there
184 are some type variales involved; otherwise there can be no overlap and
187 Note [Tricky type variable scoping]
188 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
191 op1, op2 :: Ix b => a -> b -> b
194 instance C a => C [a]
195 {-# INLINE [2] op1 #-}
198 note that 'a' and 'b' are *both* in scope in <dm-rhs>, but only 'a' is
199 in scope in <rhs>. In particular, we must make sure that 'b' is in
200 scope when typechecking <dm-rhs>. This is achieved by subFunTys,
201 which brings appropriate tyvars into scope. This happens for both
202 <dm-rhs> and for <rhs>, but that doesn't matter: the *renamer* will have
203 complained if 'b' is mentioned in <rhs>.
205 Note [Inline dfuns unconditionally]
206 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
207 The code above unconditionally inlines dict funs. Here's why.
208 Consider this program:
210 test :: Int -> Int -> Bool
211 test x y = (x,y) == (y,x) || test y x
212 -- Recursive to avoid making it inline.
214 This needs the (Eq (Int,Int)) instance. If we inline that dfun
215 the code we end up with is good:
218 \r -> case ==# [ww ww1] of wild {
219 PrelBase.False -> Test.$wtest ww1 ww;
221 case ==# [ww1 ww] of wild1 {
222 PrelBase.False -> Test.$wtest ww1 ww;
223 PrelBase.True -> PrelBase.True [];
226 Test.test = \r [w w1]
229 case w1 of w3 { PrelBase.I# ww1 -> Test.$wtest ww ww1; };
232 If we don't inline the dfun, the code is not nearly as good:
234 (==) = case PrelTup.$fEq(,) PrelBase.$fEqInt PrelBase.$fEqInt of tpl {
235 PrelBase.:DEq tpl1 tpl2 -> tpl2;
240 let { y = PrelBase.I#! [ww1]; } in
241 let { x = PrelBase.I#! [ww]; } in
242 let { sat_slx = PrelTup.(,)! [y x]; } in
243 let { sat_sly = PrelTup.(,)! [x y];
245 case == sat_sly sat_slx of wild {
246 PrelBase.False -> Test.$wtest ww1 ww;
247 PrelBase.True -> PrelBase.True [];
254 case w1 of w3 { PrelBase.I# ww1 -> Test.$wtest ww ww1; };
257 Why didn't GHC inline $fEq in those days? Because it looked big:
259 PrelTup.zdfEqZ1T{-rcX-}
260 = \ @ a{-reT-} :: * @ b{-reS-} :: *
261 zddEq{-rf6-} _Ks :: {PrelBase.Eq{-23-} a{-reT-}}
262 zddEq1{-rf7-} _Ks :: {PrelBase.Eq{-23-} b{-reS-}} ->
264 zeze{-rf0-} _Kl :: (b{-reS-} -> b{-reS-} -> PrelBase.Bool{-3c-})
265 zeze{-rf0-} = PrelBase.zeze{-01L-}@ b{-reS-} zddEq1{-rf7-} } in
267 zeze1{-rf3-} _Kl :: (a{-reT-} -> a{-reT-} -> PrelBase.Bool{-3c-})
268 zeze1{-rf3-} = PrelBase.zeze{-01L-} @ a{-reT-} zddEq{-rf6-} } in
270 zeze2{-reN-} :: ((a{-reT-}, b{-reS-}) -> (a{-reT-}, b{-reS-})-> PrelBase.Bool{-3c-})
271 zeze2{-reN-} = \ ds{-rf5-} _Ks :: (a{-reT-}, b{-reS-})
272 ds1{-rf4-} _Ks :: (a{-reT-}, b{-reS-}) ->
274 of wild{-reW-} _Kd { (a1{-rf2-} _Ks, a2{-reZ-} _Ks) ->
276 of wild1{-reX-} _Kd { (b1{-rf1-} _Ks, b2{-reY-} _Ks) ->
278 (zeze1{-rf3-} a1{-rf2-} b1{-rf1-})
279 (zeze{-rf0-} a2{-reZ-} b2{-reY-})
283 a1{-reR-} :: ((a{-reT-}, b{-reS-})-> (a{-reT-}, b{-reS-})-> PrelBase.Bool{-3c-})
284 a1{-reR-} = \ a2{-reV-} _Ks :: (a{-reT-}, b{-reS-})
285 b1{-reU-} _Ks :: (a{-reT-}, b{-reS-}) ->
286 PrelBase.not{-r6I-} (zeze2{-reN-} a2{-reV-} b1{-reU-})
288 PrelBase.zdwZCDEq{-r8J-} @ (a{-reT-}, b{-reS-}) a1{-reR-} zeze2{-reN-})
290 and it's not as bad as it seems, because it's further dramatically
291 simplified: only zeze2 is extracted and its body is simplified.
294 %************************************************************************
296 \subsection{Extracting instance decls}
298 %************************************************************************
300 Gather up the instance declarations from their various sources
303 tcInstDecls1 -- Deal with both source-code and imported instance decls
304 :: [LTyClDecl Name] -- For deriving stuff
305 -> [LInstDecl Name] -- Source code instance decls
306 -> [LDerivDecl Name] -- Source code stand-alone deriving decls
307 -> TcM (TcGblEnv, -- The full inst env
308 [InstInfo Name], -- Source-code instance decls to process;
309 -- contains all dfuns for this module
310 HsValBinds Name) -- Supporting bindings for derived instances
312 tcInstDecls1 tycl_decls inst_decls deriv_decls
314 do { -- Stop if addInstInfos etc discovers any errors
315 -- (they recover, so that we get more than one error each
318 -- (1) Do class and family instance declarations
319 ; let { idxty_decls = filter (isFamInstDecl . unLoc) tycl_decls }
320 ; local_info_tycons <- mapAndRecoverM tcLocalInstDecl1 inst_decls
321 ; idx_tycons <- mapAndRecoverM tcIdxTyInstDeclTL idxty_decls
324 at_tycons_s) = unzip local_info_tycons
325 ; at_idx_tycons = concat at_tycons_s ++ idx_tycons
326 ; clas_decls = filter (isClassDecl.unLoc) tycl_decls
327 ; implicit_things = concatMap implicitTyThings at_idx_tycons
328 ; aux_binds = mkAuxBinds at_idx_tycons
331 -- (2) Add the tycons of indexed types and their implicit
332 -- tythings to the global environment
333 ; tcExtendGlobalEnv (at_idx_tycons ++ implicit_things) $ do {
335 -- (3) Instances from generic class declarations
336 ; generic_inst_info <- getGenericInstances clas_decls
338 -- Next, construct the instance environment so far, consisting
340 -- a) local instance decls
341 -- b) generic instances
342 -- c) local family instance decls
343 ; addInsts local_info $
344 addInsts generic_inst_info $
345 addFamInsts at_idx_tycons $ do {
347 -- (4) Compute instances from "deriving" clauses;
348 -- This stuff computes a context for the derived instance
349 -- decl, so it needs to know about all the instances possible
350 -- NB: class instance declarations can contain derivings as
351 -- part of associated data type declarations
352 failIfErrsM -- If the addInsts stuff gave any errors, don't
353 -- try the deriving stuff, becuase that may give
355 ; (deriv_inst_info, deriv_binds, deriv_dus)
356 <- tcDeriving tycl_decls inst_decls deriv_decls
357 ; gbl_env <- addInsts deriv_inst_info getGblEnv
358 ; return ( addTcgDUs gbl_env deriv_dus,
359 generic_inst_info ++ deriv_inst_info ++ local_info,
360 aux_binds `plusHsValBinds` deriv_binds)
363 -- Make sure that toplevel type instance are not for associated types.
364 -- !!!TODO: Need to perform this check for the TyThing of type functions,
366 tcIdxTyInstDeclTL ldecl@(L loc decl) =
367 do { tything <- tcFamInstDecl ldecl
369 when (isAssocFamily tything) $
370 addErr $ assocInClassErr (tcdName decl)
373 isAssocFamily (ATyCon tycon) =
374 case tyConFamInst_maybe tycon of
375 Nothing -> panic "isAssocFamily: no family?!?"
376 Just (fam, _) -> isTyConAssoc fam
377 isAssocFamily _ = panic "isAssocFamily: no tycon?!?"
379 assocInClassErr :: Name -> SDoc
380 assocInClassErr name =
381 ptext (sLit "Associated type") <+> quotes (ppr name) <+>
382 ptext (sLit "must be inside a class instance")
384 addInsts :: [InstInfo Name] -> TcM a -> TcM a
385 addInsts infos thing_inside
386 = tcExtendLocalInstEnv (map iSpec infos) thing_inside
388 addFamInsts :: [TyThing] -> TcM a -> TcM a
389 addFamInsts tycons thing_inside
390 = tcExtendLocalFamInstEnv (map mkLocalFamInstTyThing tycons) thing_inside
392 mkLocalFamInstTyThing (ATyCon tycon) = mkLocalFamInst tycon
393 mkLocalFamInstTyThing tything = pprPanic "TcInstDcls.addFamInsts"
398 tcLocalInstDecl1 :: LInstDecl Name
399 -> TcM (InstInfo Name, [TyThing])
400 -- A source-file instance declaration
401 -- Type-check all the stuff before the "where"
403 -- We check for respectable instance type, and context
404 tcLocalInstDecl1 (L loc (InstDecl poly_ty binds uprags ats))
406 addErrCtxt (instDeclCtxt1 poly_ty) $
408 do { is_boot <- tcIsHsBoot
409 ; checkTc (not is_boot || (isEmptyLHsBinds binds && null uprags))
412 ; (tyvars, theta, tau) <- tcHsInstHead poly_ty
414 -- Now, check the validity of the instance.
415 ; (clas, inst_tys) <- checkValidInstHead tau
416 ; checkValidInstance tyvars theta clas inst_tys
418 -- Next, process any associated types.
419 ; idx_tycons <- recoverM (return []) $
420 do { idx_tycons <- checkNoErrs $ mapAndRecoverM tcFamInstDecl ats
421 ; checkValidAndMissingATs clas (tyvars, inst_tys)
423 ; return idx_tycons }
425 -- Finally, construct the Core representation of the instance.
426 -- (This no longer includes the associated types.)
427 ; dfun_name <- newDFunName clas inst_tys (getLoc poly_ty)
428 -- Dfun location is that of instance *header*
429 ; overlap_flag <- getOverlapFlag
430 ; let (eq_theta,dict_theta) = partition isEqPred theta
431 theta' = eq_theta ++ dict_theta
432 dfun = mkDictFunId dfun_name tyvars theta' clas inst_tys
433 ispec = mkLocalInstance dfun overlap_flag
435 ; return (InstInfo { iSpec = ispec,
436 iBinds = VanillaInst binds uprags },
440 -- We pass in the source form and the type checked form of the ATs. We
441 -- really need the source form only to be able to produce more informative
443 checkValidAndMissingATs :: Class
444 -> ([TyVar], [TcType]) -- instance types
445 -> [(LTyClDecl Name, -- source form of AT
446 TyThing)] -- Core form of AT
448 checkValidAndMissingATs clas inst_tys ats
449 = do { -- Issue a warning for each class AT that is not defined in this
451 ; let class_ats = map tyConName (classATs clas)
452 defined_ats = listToNameSet . map (tcdName.unLoc.fst) $ ats
453 omitted = filterOut (`elemNameSet` defined_ats) class_ats
454 ; warn <- doptM Opt_WarnMissingMethods
455 ; mapM_ (warnTc warn . omittedATWarn) omitted
457 -- Ensure that all AT indexes that correspond to class parameters
458 -- coincide with the types in the instance head. All remaining
459 -- AT arguments must be variables. Also raise an error for any
460 -- type instances that are not associated with this class.
461 ; mapM_ (checkIndexes clas inst_tys) ats
464 checkIndexes clas inst_tys (hsAT, ATyCon tycon)
465 -- !!!TODO: check that this does the Right Thing for indexed synonyms, too!
466 = checkIndexes' clas inst_tys hsAT
468 snd . fromJust . tyConFamInst_maybe $ tycon)
469 checkIndexes _ _ _ = panic "checkIndexes"
471 checkIndexes' clas (instTvs, instTys) hsAT (atTvs, atTys)
472 = let atName = tcdName . unLoc $ hsAT
474 setSrcSpan (getLoc hsAT) $
475 addErrCtxt (atInstCtxt atName) $
476 case find ((atName ==) . tyConName) (classATs clas) of
477 Nothing -> addErrTc $ badATErr clas atName -- not in this class
479 case assocTyConArgPoss_maybe atycon of
480 Nothing -> panic "checkIndexes': AT has no args poss?!?"
483 -- The following is tricky! We need to deal with three
484 -- complications: (1) The AT possibly only uses a subset of
485 -- the class parameters as indexes and those it uses may be in
486 -- a different order; (2) the AT may have extra arguments,
487 -- which must be type variables; and (3) variables in AT and
488 -- instance head will be different `Name's even if their
489 -- source lexemes are identical.
491 -- e.g. class C a b c where
492 -- data D b a :: * -> * -- NB (1) b a, omits c
493 -- instance C [x] Bool Char where
494 -- data D Bool [x] v = MkD x [v] -- NB (2) v
495 -- -- NB (3) the x in 'instance C...' have differnt
496 -- -- Names to x's in 'data D...'
498 -- Re (1), `poss' contains a permutation vector to extract the
499 -- class parameters in the right order.
501 -- Re (2), we wrap the (permuted) class parameters in a Maybe
502 -- type and use Nothing for any extra AT arguments. (First
503 -- equation of `checkIndex' below.)
505 -- Re (3), we replace any type variable in the AT parameters
506 -- that has the same source lexeme as some variable in the
507 -- instance types with the instance type variable sharing its
510 let relevantInstTys = map (instTys !!) poss
511 instArgs = map Just relevantInstTys ++
512 repeat Nothing -- extra arguments
513 renaming = substSameTyVar atTvs instTvs
515 zipWithM_ checkIndex (substTys renaming atTys) instArgs
517 checkIndex ty Nothing
518 | isTyVarTy ty = return ()
519 | otherwise = addErrTc $ mustBeVarArgErr ty
520 checkIndex ty (Just instTy)
521 | ty `tcEqType` instTy = return ()
522 | otherwise = addErrTc $ wrongATArgErr ty instTy
524 listToNameSet = addListToNameSet emptyNameSet
526 substSameTyVar [] _ = emptyTvSubst
527 substSameTyVar (tv:tvs) replacingTvs =
528 let replacement = case find (tv `sameLexeme`) replacingTvs of
529 Nothing -> mkTyVarTy tv
530 Just rtv -> mkTyVarTy rtv
532 tv1 `sameLexeme` tv2 =
533 nameOccName (tyVarName tv1) == nameOccName (tyVarName tv2)
535 extendTvSubst (substSameTyVar tvs replacingTvs) tv replacement
539 %************************************************************************
541 Type-checking instance declarations, pass 2
543 %************************************************************************
546 tcInstDecls2 :: [LTyClDecl Name] -> [InstInfo Name]
547 -> TcM (LHsBinds Id, TcLclEnv)
548 -- (a) From each class declaration,
549 -- generate any default-method bindings
550 -- (b) From each instance decl
551 -- generate the dfun binding
553 tcInstDecls2 tycl_decls inst_decls
554 = do { -- (a) Default methods from class decls
555 (dm_binds_s, dm_ids_s) <- mapAndUnzipM tcClassDecl2 $
556 filter (isClassDecl.unLoc) tycl_decls
557 ; tcExtendIdEnv (concat dm_ids_s) $ do
559 -- (b) instance declarations
560 ; inst_binds_s <- mapM tcInstDecl2 inst_decls
563 ; let binds = unionManyBags dm_binds_s `unionBags`
564 unionManyBags inst_binds_s
565 ; tcl_env <- getLclEnv -- Default method Ids in here
566 ; return (binds, tcl_env) }
568 tcInstDecl2 :: InstInfo Name -> TcM (LHsBinds Id)
569 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = ibinds })
570 = recoverM (return emptyLHsBinds) $
572 addErrCtxt (instDeclCtxt2 (idType dfun_id)) $
573 tc_inst_decl2 dfun_id ibinds
575 dfun_id = instanceDFunId ispec
576 loc = getSrcSpan dfun_id
581 tc_inst_decl2 :: Id -> InstBindings Name -> TcM (LHsBinds Id)
582 -- Returns a binding for the dfun
584 ------------------------
585 -- Derived newtype instances; surprisingly tricky!
587 -- class Show a => Foo a b where ...
588 -- newtype N a = MkN (Tree [a]) deriving( Foo Int )
590 -- The newtype gives an FC axiom looking like
591 -- axiom CoN a :: N a ~ Tree [a]
592 -- (see Note [Newtype coercions] in TyCon for this unusual form of axiom)
594 -- So all need is to generate a binding looking like:
595 -- dfunFooT :: forall a. (Foo Int (Tree [a], Show (N a)) => Foo Int (N a)
596 -- dfunFooT = /\a. \(ds:Show (N a)) (df:Foo (Tree [a])).
597 -- case df `cast` (Foo Int (sym (CoN a))) of
598 -- Foo _ op1 .. opn -> Foo ds op1 .. opn
600 -- If there are no superclasses, matters are simpler, because we don't need the case
601 -- see Note [Newtype deriving superclasses] in TcDeriv.lhs
603 tc_inst_decl2 dfun_id (NewTypeDerived coi)
604 = do { let rigid_info = InstSkol
605 origin = SigOrigin rigid_info
606 inst_ty = idType dfun_id
607 ; (inst_tvs', theta, inst_head_ty) <- tcSkolSigType rigid_info inst_ty
608 -- inst_head_ty is a PredType
610 ; let (cls, cls_inst_tys) = tcSplitDFunHead inst_head_ty
611 (class_tyvars, sc_theta, _, _) = classBigSig cls
612 cls_tycon = classTyCon cls
613 sc_theta' = substTheta (zipOpenTvSubst class_tyvars cls_inst_tys) sc_theta
614 Just (initial_cls_inst_tys, last_ty) = snocView cls_inst_tys
618 IdCo -> (last_ty, idHsWrapper)
619 ACo co -> (snd (coercionKind co), WpCast (mk_full_coercion co))
621 -----------------------
623 -- The inst_head looks like (C s1 .. sm (T a1 .. ak))
624 -- But we want the coercion (C s1 .. sm (sym (CoT a1 .. ak)))
625 -- with kind (C s1 .. sm (T a1 .. ak) ~ C s1 .. sm <rep_ty>)
626 -- where rep_ty is the (eta-reduced) type rep of T
627 -- So we just replace T with CoT, and insert a 'sym'
628 -- NB: we know that k will be >= arity of CoT, because the latter fully eta-reduced
630 mk_full_coercion co = mkTyConApp cls_tycon
631 (initial_cls_inst_tys ++ [mkSymCoercion co])
632 -- Full coercion : (Foo Int (Tree [a]) ~ Foo Int (N a)
634 rep_pred = mkClassPred cls (initial_cls_inst_tys ++ [rep_ty])
635 -- In our example, rep_pred is (Foo Int (Tree [a]))
637 ; sc_loc <- getInstLoc InstScOrigin
638 ; sc_dicts <- newDictBndrs sc_loc sc_theta'
639 ; inst_loc <- getInstLoc origin
640 ; dfun_dicts <- newDictBndrs inst_loc theta
641 ; rep_dict <- newDictBndr inst_loc rep_pred
642 ; this_dict <- newDictBndr inst_loc (mkClassPred cls cls_inst_tys)
644 -- Figure out bindings for the superclass context from dfun_dicts
645 -- Don't include this_dict in the 'givens', else
646 -- sc_dicts get bound by just selecting from this_dict!!
647 ; sc_binds <- addErrCtxt superClassCtxt $
648 tcSimplifySuperClasses inst_loc this_dict dfun_dicts
651 -- It's possible that the superclass stuff might unified something
652 -- in the envt with one of the clas_tyvars
653 ; checkSigTyVars inst_tvs'
655 ; let coerced_rep_dict = wrapId wrapper (instToId rep_dict)
657 ; body <- make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
658 ; let dict_bind = noLoc $ VarBind (instToId this_dict) (noLoc body)
660 ; return (unitBag $ noLoc $
661 AbsBinds inst_tvs' (map instToVar dfun_dicts)
662 [(inst_tvs', dfun_id, instToId this_dict, [])]
663 (dict_bind `consBag` sc_binds)) }
665 -----------------------
666 -- (make_body C tys scs coreced_rep_dict)
668 -- (case coerced_rep_dict of { C _ ops -> C scs ops })
669 -- But if there are no superclasses, it returns just coerced_rep_dict
670 -- See Note [Newtype deriving superclasses] in TcDeriv.lhs
672 make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
673 | null sc_dicts -- Case (a)
674 = return coerced_rep_dict
675 | otherwise -- Case (b)
676 = do { op_ids <- newSysLocalIds (fsLit "op") op_tys
677 ; dummy_sc_dict_ids <- newSysLocalIds (fsLit "sc") (map idType sc_dict_ids)
678 ; let the_pat = ConPatOut { pat_con = noLoc cls_data_con, pat_tvs = [],
679 pat_dicts = dummy_sc_dict_ids,
680 pat_binds = emptyLHsBinds,
681 pat_args = PrefixCon (map nlVarPat op_ids),
683 the_match = mkSimpleMatch [noLoc the_pat] the_rhs
684 the_rhs = mkHsConApp cls_data_con cls_inst_tys $
685 map HsVar (sc_dict_ids ++ op_ids)
687 -- Warning: this HsCase scrutinises a value with a PredTy, which is
688 -- never otherwise seen in Haskell source code. It'd be
689 -- nicer to generate Core directly!
690 ; return (HsCase (noLoc coerced_rep_dict) $
691 MatchGroup [the_match] (mkFunTy pat_ty pat_ty)) }
693 sc_dict_ids = map instToId sc_dicts
694 pat_ty = mkTyConApp cls_tycon cls_inst_tys
695 cls_data_con = head (tyConDataCons cls_tycon)
696 cls_arg_tys = dataConInstArgTys cls_data_con cls_inst_tys
697 op_tys = dropList sc_dict_ids cls_arg_tys
699 ------------------------
700 -- Ordinary instances
702 tc_inst_decl2 dfun_id (VanillaInst monobinds uprags)
703 = do { let rigid_info = InstSkol
704 inst_ty = idType dfun_id
706 -- Instantiate the instance decl with skolem constants
707 ; (inst_tyvars', dfun_theta', inst_head') <- tcSkolSigType rigid_info inst_ty
708 -- These inst_tyvars' scope over the 'where' part
709 -- Those tyvars are inside the dfun_id's type, which is a bit
710 -- bizarre, but OK so long as you realise it!
712 (clas, inst_tys') = tcSplitDFunHead inst_head'
713 (class_tyvars, sc_theta, _, op_items) = classBigSig clas
715 -- Instantiate the super-class context with inst_tys
716 sc_theta' = substTheta (zipOpenTvSubst class_tyvars inst_tys') sc_theta
717 origin = SigOrigin rigid_info
719 -- Create dictionary Ids from the specified instance contexts.
720 ; sc_loc <- getInstLoc InstScOrigin
721 ; sc_dicts <- newDictOccs sc_loc sc_theta' -- These are wanted
722 ; inst_loc <- getInstLoc origin
723 ; dfun_dicts <- newDictBndrs inst_loc dfun_theta' -- Includes equalities
724 ; this_dict <- newDictBndr inst_loc (mkClassPred clas inst_tys')
726 -- Default-method Ids may be mentioned in synthesised RHSs,
727 -- but they'll already be in the environment.
729 -- Typecheck the methods
730 ; let this_dict_id = instToId this_dict
731 dfun_lam_vars = map instToVar dfun_dicts -- Includes equalities
732 prag_fn = mkPragFun uprags
733 loc = getSrcSpan dfun_id
734 tc_meth = tcInstanceMethod loc clas inst_tyvars'
736 dfun_theta' inst_tys'
739 ; (meth_exprs, meth_binds) <- tcExtendTyVarEnv inst_tyvars' $
740 mapAndUnzipM tc_meth op_items
742 -- Figure out bindings for the superclass context
743 -- Don't include this_dict in the 'givens', else
744 -- sc_dicts get bound by just selecting from this_dict!!
745 ; sc_binds <- addErrCtxt superClassCtxt $
746 tcSimplifySuperClasses inst_loc this_dict dfun_dicts sc_dicts
747 -- Note [Recursive superclasses]
749 -- It's possible that the superclass stuff might unified something
750 -- in the envt with one of the inst_tyvars'
751 ; checkSigTyVars inst_tyvars'
753 -- Deal with 'SPECIALISE instance' pragmas
754 ; prags <- tcPrags dfun_id (filter isSpecInstLSig uprags)
756 -- Create the result bindings
757 ; let dict_constr = classDataCon clas
758 inline_prag | null dfun_dicts = []
759 | otherwise = [L loc (InlinePrag (alwaysInlineSpec FunLike))]
760 -- Always inline the dfun; this is an experimental decision
761 -- because it makes a big performance difference sometimes.
762 -- Often it means we can do the method selection, and then
763 -- inline the method as well. Marcin's idea; see comments below.
765 -- BUT: don't inline it if it's a constant dictionary;
766 -- we'll get all the benefit without inlining, and we get
767 -- a **lot** of code duplication if we inline it
769 -- See Note [Inline dfuns] below
771 sc_dict_vars = map instToVar sc_dicts
772 dict_bind = L loc (VarBind this_dict_id dict_rhs)
773 dict_rhs = foldl (\ f a -> L loc (HsApp f (L loc a))) inst_constr meth_exprs
774 inst_constr = L loc $ wrapId (mkWpApps sc_dict_vars <.> mkWpTyApps inst_tys')
775 (dataConWrapId dict_constr)
776 -- We don't produce a binding for the dict_constr; instead we
777 -- rely on the simplifier to unfold this saturated application
778 -- We do this rather than generate an HsCon directly, because
779 -- it means that the special cases (e.g. dictionary with only one
780 -- member) are dealt with by the common MkId.mkDataConWrapId code rather
781 -- than needing to be repeated here.
784 main_bind = noLoc $ AbsBinds
787 [(inst_tyvars', dfun_id, this_dict_id, inline_prag ++ prags)]
788 (dict_bind `consBag` sc_binds)
790 ; showLIE (text "instance")
791 ; return (main_bind `consBag` unionManyBags meth_binds) }
794 Note [Recursive superclasses]
795 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
796 See Trac #1470 for why we would *like* to add "this_dict" to the
797 available instances here. But we can't do so because then the superclases
798 get satisfied by selection from this_dict, and that leads to an immediate
799 loop. What we need is to add this_dict to Avails without adding its
800 superclasses, and we currently have no way to do that.
803 %************************************************************************
805 Type-checking an instance method
807 %************************************************************************
810 - Make the method bindings, as a [(NonRec, HsBinds)], one per method
811 - Remembering to use fresh Name (the instance method Name) as the binder
812 - Bring the instance method Ids into scope, for the benefit of tcInstSig
813 - Use sig_fn mapping instance method Name -> instance tyvars
815 - Use tcValBinds to do the checking
818 tcInstanceMethod :: SrcSpan -> Class -> [TcTyVar] -> [Inst]
819 -> TcThetaType -> [TcType]
821 -> TcPragFun -> LHsBinds Name
823 -> TcM (HsExpr Id, LHsBinds Id)
824 -- The returned inst_meth_ids all have types starting
825 -- forall tvs. theta => ...
827 tcInstanceMethod loc clas tyvars dfun_dicts theta inst_tys
828 this_dict dfun_id prag_fn binds_in (sel_id, dm_info)
829 = do { cloned_this <- cloneDict this_dict
830 -- Need to clone the dict in case it is floated out, and
831 -- then clashes with its friends
833 ; let local_meth_name = mkInternalName uniq1 sel_occ loc -- Same OccName
834 this_dict_bind = L loc $ VarBind (instToId cloned_this) $
835 L loc $ wrapId meth_wrapper dfun_id
836 mb_this_bind | null tyvars = Nothing
837 | otherwise = Just (cloned_this, this_dict_bind)
838 -- Only need the this_dict stuff if there are type variables
839 -- involved; otherwise overlap is not possible
840 -- See Note [Subtle interaction of recursion and overlap]
842 tc_body rn_bind = do { (meth_id, tc_binds) <- tcInstanceMethodBody
843 InstSkol clas tyvars dfun_dicts theta inst_tys
846 meth_sig_fn meth_prag_fn rn_bind
847 ; return (wrapId meth_wrapper meth_id, tc_binds) }
849 ; case (findMethodBind sel_name local_meth_name binds_in, dm_info) of
850 -- There is a user-supplied method binding, so use it
851 (Just user_bind, _) -> tc_body user_bind
853 -- The user didn't supply a method binding, so we have to make
854 -- up a default binding, in a way depending on the default-method info
856 (Nothing, GenDefMeth) -> do -- Derivable type classes stuff
857 { meth_bind <- mkGenericDefMethBind clas inst_tys sel_id local_meth_name
858 ; tc_body meth_bind }
860 (Nothing, NoDefMeth) -> do -- No default method in the class
861 { warn <- doptM Opt_WarnMissingMethods
862 ; warnTc (warn -- Warn only if -fwarn-missing-methods
863 && reportIfUnused (getOccName sel_id))
864 -- Don't warn about _foo methods
866 ; return (error_rhs, emptyBag) }
868 (Nothing, DefMeth) -> do -- An polymorphic default method
869 { -- Build the typechecked version directly,
870 -- without calling typecheck_method;
871 -- see Note [Default methods in instances]
872 dm_name <- lookupGlobalOccRn (mkDefMethRdrName sel_name)
873 -- Might not be imported, but will be an OrigName
874 ; dm_id <- tcLookupId dm_name
875 ; return (wrapId dm_wrapper dm_id, emptyBag) } }
877 sel_name = idName sel_id
878 sel_occ = nameOccName sel_name
879 this_dict_id = instToId this_dict
881 meth_prag_fn _ = prag_fn sel_name
882 meth_sig_fn _ = Just [] -- The 'Just' says "yes, there's a type sig"
883 -- But there are no scoped type variables from local_method_id
884 -- Only the ones from the instance decl itself, which are already
885 -- in scope. Example:
886 -- class C a where { op :: forall b. Eq b => ... }
887 -- instance C [c] where { op = <rhs> }
888 -- In <rhs>, 'c' is scope but 'b' is not!
890 error_rhs = HsApp error_fun error_msg
891 error_fun = L loc $ wrapId (WpTyApp meth_tau) nO_METHOD_BINDING_ERROR_ID
892 error_msg = L loc (HsLit (HsStringPrim (mkFastString error_string)))
893 meth_tau = funResultTy (applyTys (idType sel_id) inst_tys)
894 error_string = showSDoc (hcat [ppr loc, text "|", ppr sel_id ])
896 dm_wrapper = WpApp this_dict_id <.> mkWpTyApps inst_tys
898 omitted_meth_warn :: SDoc
899 omitted_meth_warn = ptext (sLit "No explicit method nor default method for")
900 <+> quotes (ppr sel_id)
902 dfun_lam_vars = map instToVar dfun_dicts
903 meth_wrapper = mkWpApps dfun_lam_vars <.> mkWpTyApps (mkTyVarTys tyvars)
906 wrapId :: HsWrapper -> id -> HsExpr id
907 wrapId wrapper id = mkHsWrap wrapper (HsVar id)
910 Note [Default methods in instances]
911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
920 From the class decl we get
922 $dmfoo :: forall v x. Baz v x => x -> x
924 Notice that the type is ambiguous. That's fine, though. The instance decl generates
926 $dBazIntInt = MkBaz ($dmfoo Int Int $dBazIntInt)
928 BUT this does mean we must generate the dictionary translation directly, rather
929 than generating source-code and type-checking it. That was the bug ing
930 Trac #1061. In any case it's less work to generate the translated version!
933 %************************************************************************
935 \subsection{Error messages}
937 %************************************************************************
940 instDeclCtxt1 :: LHsType Name -> SDoc
941 instDeclCtxt1 hs_inst_ty
942 = inst_decl_ctxt (case unLoc hs_inst_ty of
943 HsForAllTy _ _ _ (L _ (HsPredTy pred)) -> ppr pred
944 HsPredTy pred -> ppr pred
945 _ -> ppr hs_inst_ty) -- Don't expect this
946 instDeclCtxt2 :: Type -> SDoc
947 instDeclCtxt2 dfun_ty
948 = inst_decl_ctxt (ppr (mkClassPred cls tys))
950 (_,_,cls,tys) = tcSplitDFunTy dfun_ty
952 inst_decl_ctxt :: SDoc -> SDoc
953 inst_decl_ctxt doc = ptext (sLit "In the instance declaration for") <+> quotes doc
955 superClassCtxt :: SDoc
956 superClassCtxt = ptext (sLit "When checking the super-classes of an instance declaration")
958 atInstCtxt :: Name -> SDoc
959 atInstCtxt name = ptext (sLit "In the associated type instance for") <+>
962 mustBeVarArgErr :: Type -> SDoc
964 sep [ ptext (sLit "Arguments that do not correspond to a class parameter") <+>
965 ptext (sLit "must be variables")
966 , ptext (sLit "Instead of a variable, found") <+> ppr ty
969 wrongATArgErr :: Type -> Type -> SDoc
970 wrongATArgErr ty instTy =
971 sep [ ptext (sLit "Type indexes must match class instance head")
972 , ptext (sLit "Found") <+> quotes (ppr ty)
973 <+> ptext (sLit "but expected") <+> quotes (ppr instTy)