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 RnSource ( addTcgDUs )
34 import CoreUnfold ( mkDFunUnfolding )
35 import CoreSyn ( Expr(Var) )
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 -- The INLINE pragma comes from the user pragma
96 {-# INLINE [2] op1_i #-} -- From the instance decl bindings
97 op1_i, op2_i :: forall a. C a => forall b. Ix b => [a] -> b -> b
98 op1_i = /\a. \(d:C a).
101 -- Note [Subtle interaction of recursion and overlap]
103 local_op1 :: forall b. Ix b => [a] -> b -> b
105 -- Source code; run the type checker on this
106 -- NB: Type variable 'a' (but not 'b') is in scope in <rhs>
107 -- Note [Tricky type variable scoping]
111 op2_i = /\a \d:C a. $dmop2 [a] (df_i a d)
113 -- The dictionary function itself
114 {-# NOINLINE CONLIKE df_i #-} -- Never inline dictionary functions
115 df_i :: forall a. C a -> C [a]
116 df_i = /\a. \d:C a. MkC (op1_i a d) (op2_i a d)
117 -- But see Note [Default methods in instances]
118 -- We can't apply the type checker to the default-method call
120 -- Use a RULE to short-circuit applications of the class ops
121 {-# RULE "op1@C[a]" forall a, d:C a.
122 op1 [a] (df_i d) = op1_i a d #-}
124 Note [Instances and loop breakers]
125 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
126 * Note that df_i may be mutually recursive with both op1_i and op2_i.
127 It's crucial that df_i is not chosen as the loop breaker, even
128 though op1_i has a (user-specified) INLINE pragma.
130 * Instead the idea is to inline df_i into op1_i, which may then select
131 methods from the MkC record, and thereby break the recursion with
132 df_i, leaving a *self*-recurisve op1_i. (If op1_i doesn't call op at
133 the same type, it won't mention df_i, so there won't be recursion in
136 * If op1_i is marked INLINE by the user there's a danger that we won't
137 inline df_i in it, and that in turn means that (since it'll be a
138 loop-breaker because df_i isn't), op1_i will ironically never be
139 inlined. But this is OK: the recursion breaking happens by way of
140 a RULE (the magic ClassOp rule above), and RULES work inside InlineRule
141 unfoldings. See Note [RULEs enabled in SimplGently] in SimplUtils
143 Note [ClassOp/DFun selection]
144 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145 One thing we see a lot is stuff like
147 where 'op2' is a ClassOp and 'df' is DFun. Now, we could inline *both*
148 'op2' and 'df' to get
149 case (MkD ($cop1 d1 d2) ($cop2 d1 d2) ... of
150 MkD _ op2 _ _ _ -> op2
151 And that will reduce to ($cop2 d1 d2) which is what we wanted.
153 But it's tricky to make this work in practice, because it requires us to
154 inline both 'op2' and 'df'. But neither is keen to inline without having
155 seen the other's result; and it's very easy to get code bloat (from the
156 big intermediate) if you inline a bit too much.
158 Instead we use a cunning trick.
159 * We arrange that 'df' and 'op2' NEVER inline.
161 * We arrange that 'df' is ALWAYS defined in the sylised form
162 df d1 d2 = MkD ($cop1 d1 d2) ($cop2 d1 d2) ...
164 * We give 'df' a magical unfolding (DFunUnfolding [$cop1, $cop2, ..])
165 that lists its methods.
167 * We make CoreUnfold.exprIsConApp_maybe spot a DFunUnfolding and return
168 a suitable constructor application -- inlining df "on the fly" as it
171 * We give the ClassOp 'op2' a BuiltinRule that extracts the right piece
172 iff its argument satisfies exprIsConApp_maybe. This is done in
175 * We make 'df' CONLIKE, so that shared uses stil match; eg
177 in ...(op2 d)...(op1 d)...
179 Note [Single-method classes]
180 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
181 If the class has just one method (or, more accurately, just one element
182 of {superclasses + methods}), then we still use the *same* strategy
184 class C a where op :: a -> a
185 instance C a => C [a] where op = <blah>
187 We translate the class decl into a newtype, which just gives
190 axiom Co:C a :: C a ~ (a->a)
192 op :: forall a. C a -> (a -> a)
193 op a d = d |> (Co:C a)
195 MkC :: forall a. (a->a) -> C a
196 MkC = /\a.\op. op |> (sym Co:C a)
198 df :: forall a. C a => C [a]
199 {-# NOINLINE df DFun[ $cop_list ] #-}
200 df = /\a. \d. MkC ($cop_list a d)
202 $cop_list :: forall a. C a => [a] -> [a]
205 The "constructor" MkC expands to a cast, as does the class-op selector.
206 The RULE works just like for multi-field dictionaries:
208 * (df a d) returns (Just (MkC,..,[$cop_list a d]))
209 to exprIsConApp_Maybe
211 * The RULE for op picks the right result
213 This is a bit of a hack, because (df a d) isn't *really* a constructor
214 application. But it works just fine in this case, exprIsConApp_maybe
215 is otherwise used only when we hit a case expression which will have
216 a real data constructor in it.
218 The biggest reason for doing it this way, apart from uniformity, is
219 that we want to be very careful when we have
220 instance C a => C [a] where
223 then we'll get an INLINE pragma on $cop_list but it's important that
224 $cop_list only inlines when it's applied to *two* arguments (the
225 dictionary and the list argument
227 The danger is that we'll get something like
228 op_list :: C a => [a] -> [a]
229 op_list = /\a.\d. $cop_list a d
230 and then we'll eta expand, and then we'll inline TOO EARLY. This happened in
231 Trac #3772 and I spent far too long fiddling around trying to fix it.
232 Look at the test for Trac #3772.
234 (Note: re-reading the above, I can't see how using the
235 uniform story solves the problem.)
237 Note [Subtle interaction of recursion and overlap]
238 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
240 class C a where { op1,op2 :: a -> a }
241 instance C a => C [a] where
242 op1 x = op2 x ++ op2 x
244 intance C [Int] where
247 When type-checking the C [a] instance, we need a C [a] dictionary (for
248 the call of op2). If we look up in the instance environment, we find
249 an overlap. And in *general* the right thing is to complain (see Note
250 [Overlapping instances] in InstEnv). But in *this* case it's wrong to
251 complain, because we just want to delegate to the op2 of this same
254 Why is this justified? Because we generate a (C [a]) constraint in
255 a context in which 'a' cannot be instantiated to anything that matches
256 other overlapping instances, or else we would not be excecuting this
257 version of op1 in the first place.
259 It might even be a bit disguised:
261 nullFail :: C [a] => [a] -> [a]
262 nullFail x = op2 x ++ op2 x
264 instance C a => C [a] where
267 Precisely this is used in package 'regex-base', module Context.hs.
268 See the overlapping instances for RegexContext, and the fact that they
269 call 'nullFail' just like the example above. The DoCon package also
270 does the same thing; it shows up in module Fraction.hs
272 Conclusion: when typechecking the methods in a C [a] instance, we want
273 to have C [a] available. That is why we have the strange local
274 definition for 'this' in the definition of op1_i in the example above.
275 We can typecheck the defintion of local_op1, and when doing tcSimplifyCheck
276 we supply 'this' as a given dictionary. Only needed, though, if there
277 are some type variables involved; otherwise there can be no overlap and
280 Note [Tricky type variable scoping]
281 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
284 op1, op2 :: Ix b => a -> b -> b
287 instance C a => C [a]
288 {-# INLINE [2] op1 #-}
291 note that 'a' and 'b' are *both* in scope in <dm-rhs>, but only 'a' is
292 in scope in <rhs>. In particular, we must make sure that 'b' is in
293 scope when typechecking <dm-rhs>. This is achieved by subFunTys,
294 which brings appropriate tyvars into scope. This happens for both
295 <dm-rhs> and for <rhs>, but that doesn't matter: the *renamer* will have
296 complained if 'b' is mentioned in <rhs>.
300 %************************************************************************
302 \subsection{Extracting instance decls}
304 %************************************************************************
306 Gather up the instance declarations from their various sources
309 tcInstDecls1 -- Deal with both source-code and imported instance decls
310 :: [LTyClDecl Name] -- For deriving stuff
311 -> [LInstDecl Name] -- Source code instance decls
312 -> [LDerivDecl Name] -- Source code stand-alone deriving decls
313 -> TcM (TcGblEnv, -- The full inst env
314 [InstInfo Name], -- Source-code instance decls to process;
315 -- contains all dfuns for this module
316 HsValBinds Name) -- Supporting bindings for derived instances
318 tcInstDecls1 tycl_decls inst_decls deriv_decls
320 do { -- Stop if addInstInfos etc discovers any errors
321 -- (they recover, so that we get more than one error each
324 -- (1) Do class and family instance declarations
325 ; idx_tycons <- mapAndRecoverM (tcFamInstDecl TopLevel) $
326 filter (isFamInstDecl . unLoc) tycl_decls
327 ; local_info_tycons <- mapAndRecoverM tcLocalInstDecl1 inst_decls
330 at_tycons_s) = unzip local_info_tycons
331 ; at_idx_tycons = concat at_tycons_s ++ idx_tycons
332 ; clas_decls = filter (isClassDecl.unLoc) tycl_decls
333 ; implicit_things = concatMap implicitTyThings at_idx_tycons
334 ; aux_binds = mkRecSelBinds at_idx_tycons
337 -- (2) Add the tycons of indexed types and their implicit
338 -- tythings to the global environment
339 ; tcExtendGlobalEnv (at_idx_tycons ++ implicit_things) $ do {
341 -- (3) Instances from generic class declarations
342 ; generic_inst_info <- getGenericInstances clas_decls
344 -- Next, construct the instance environment so far, consisting
346 -- (a) local instance decls
347 -- (b) generic instances
348 -- (c) local family instance decls
349 ; addInsts local_info $
350 addInsts generic_inst_info $
351 addFamInsts at_idx_tycons $ do {
353 -- (4) Compute instances from "deriving" clauses;
354 -- This stuff computes a context for the derived instance
355 -- decl, so it needs to know about all the instances possible
356 -- NB: class instance declarations can contain derivings as
357 -- part of associated data type declarations
358 failIfErrsM -- If the addInsts stuff gave any errors, don't
359 -- try the deriving stuff, becuase that may give
361 ; (deriv_inst_info, deriv_binds, deriv_dus)
362 <- tcDeriving tycl_decls inst_decls deriv_decls
363 ; gbl_env <- addInsts deriv_inst_info getGblEnv
364 ; return ( addTcgDUs gbl_env deriv_dus,
365 generic_inst_info ++ deriv_inst_info ++ local_info,
366 aux_binds `plusHsValBinds` deriv_binds)
369 addInsts :: [InstInfo Name] -> TcM a -> TcM a
370 addInsts infos thing_inside
371 = tcExtendLocalInstEnv (map iSpec infos) thing_inside
373 addFamInsts :: [TyThing] -> TcM a -> TcM a
374 addFamInsts tycons thing_inside
375 = tcExtendLocalFamInstEnv (map mkLocalFamInstTyThing tycons) thing_inside
377 mkLocalFamInstTyThing (ATyCon tycon) = mkLocalFamInst tycon
378 mkLocalFamInstTyThing tything = pprPanic "TcInstDcls.addFamInsts"
383 tcLocalInstDecl1 :: LInstDecl Name
384 -> TcM (InstInfo Name, [TyThing])
385 -- A source-file instance declaration
386 -- Type-check all the stuff before the "where"
388 -- We check for respectable instance type, and context
389 tcLocalInstDecl1 (L loc (InstDecl poly_ty binds uprags ats))
391 addErrCtxt (instDeclCtxt1 poly_ty) $
393 do { is_boot <- tcIsHsBoot
394 ; checkTc (not is_boot || (isEmptyLHsBinds binds && null uprags))
397 ; (tyvars, theta, tau) <- tcHsInstHead poly_ty
399 -- Now, check the validity of the instance.
400 ; (clas, inst_tys) <- checkValidInstance poly_ty tyvars theta tau
402 -- Next, process any associated types.
403 ; idx_tycons <- recoverM (return []) $
404 do { idx_tycons <- checkNoErrs $
405 mapAndRecoverM (tcFamInstDecl NotTopLevel) ats
406 ; checkValidAndMissingATs clas (tyvars, inst_tys)
408 ; return idx_tycons }
410 -- Finally, construct the Core representation of the instance.
411 -- (This no longer includes the associated types.)
412 ; dfun_name <- newDFunName clas inst_tys (getLoc poly_ty)
413 -- Dfun location is that of instance *header*
414 ; overlap_flag <- getOverlapFlag
415 ; let (eq_theta,dict_theta) = partition isEqPred theta
416 theta' = eq_theta ++ dict_theta
417 dfun = mkDictFunId dfun_name tyvars theta' clas inst_tys
418 ispec = mkLocalInstance dfun overlap_flag
420 ; return (InstInfo { iSpec = ispec,
421 iBinds = VanillaInst binds uprags False },
425 -- We pass in the source form and the type checked form of the ATs. We
426 -- really need the source form only to be able to produce more informative
428 checkValidAndMissingATs :: Class
429 -> ([TyVar], [TcType]) -- instance types
430 -> [(LTyClDecl Name, -- source form of AT
431 TyThing)] -- Core form of AT
433 checkValidAndMissingATs clas inst_tys ats
434 = do { -- Issue a warning for each class AT that is not defined in this
436 ; let class_ats = map tyConName (classATs clas)
437 defined_ats = listToNameSet . map (tcdName.unLoc.fst) $ ats
438 omitted = filterOut (`elemNameSet` defined_ats) class_ats
439 ; warn <- doptM Opt_WarnMissingMethods
440 ; mapM_ (warnTc warn . omittedATWarn) omitted
442 -- Ensure that all AT indexes that correspond to class parameters
443 -- coincide with the types in the instance head. All remaining
444 -- AT arguments must be variables. Also raise an error for any
445 -- type instances that are not associated with this class.
446 ; mapM_ (checkIndexes clas inst_tys) ats
449 checkIndexes clas inst_tys (hsAT, ATyCon tycon)
450 -- !!!TODO: check that this does the Right Thing for indexed synonyms, too!
451 = checkIndexes' clas inst_tys hsAT
453 snd . fromJust . tyConFamInst_maybe $ tycon)
454 checkIndexes _ _ _ = panic "checkIndexes"
456 checkIndexes' clas (instTvs, instTys) hsAT (atTvs, atTys)
457 = let atName = tcdName . unLoc $ hsAT
459 setSrcSpan (getLoc hsAT) $
460 addErrCtxt (atInstCtxt atName) $
461 case find ((atName ==) . tyConName) (classATs clas) of
462 Nothing -> addErrTc $ badATErr clas atName -- not in this class
464 case assocTyConArgPoss_maybe atycon of
465 Nothing -> panic "checkIndexes': AT has no args poss?!?"
468 -- The following is tricky! We need to deal with three
469 -- complications: (1) The AT possibly only uses a subset of
470 -- the class parameters as indexes and those it uses may be in
471 -- a different order; (2) the AT may have extra arguments,
472 -- which must be type variables; and (3) variables in AT and
473 -- instance head will be different `Name's even if their
474 -- source lexemes are identical.
476 -- e.g. class C a b c where
477 -- data D b a :: * -> * -- NB (1) b a, omits c
478 -- instance C [x] Bool Char where
479 -- data D Bool [x] v = MkD x [v] -- NB (2) v
480 -- -- NB (3) the x in 'instance C...' have differnt
481 -- -- Names to x's in 'data D...'
483 -- Re (1), `poss' contains a permutation vector to extract the
484 -- class parameters in the right order.
486 -- Re (2), we wrap the (permuted) class parameters in a Maybe
487 -- type and use Nothing for any extra AT arguments. (First
488 -- equation of `checkIndex' below.)
490 -- Re (3), we replace any type variable in the AT parameters
491 -- that has the same source lexeme as some variable in the
492 -- instance types with the instance type variable sharing its
495 let relevantInstTys = map (instTys !!) poss
496 instArgs = map Just relevantInstTys ++
497 repeat Nothing -- extra arguments
498 renaming = substSameTyVar atTvs instTvs
500 zipWithM_ checkIndex (substTys renaming atTys) instArgs
502 checkIndex ty Nothing
503 | isTyVarTy ty = return ()
504 | otherwise = addErrTc $ mustBeVarArgErr ty
505 checkIndex ty (Just instTy)
506 | ty `tcEqType` instTy = return ()
507 | otherwise = addErrTc $ wrongATArgErr ty instTy
509 listToNameSet = addListToNameSet emptyNameSet
511 substSameTyVar [] _ = emptyTvSubst
512 substSameTyVar (tv:tvs) replacingTvs =
513 let replacement = case find (tv `sameLexeme`) replacingTvs of
514 Nothing -> mkTyVarTy tv
515 Just rtv -> mkTyVarTy rtv
517 tv1 `sameLexeme` tv2 =
518 nameOccName (tyVarName tv1) == nameOccName (tyVarName tv2)
520 extendTvSubst (substSameTyVar tvs replacingTvs) tv replacement
524 %************************************************************************
526 Type-checking instance declarations, pass 2
528 %************************************************************************
531 tcInstDecls2 :: [LTyClDecl Name] -> [InstInfo Name]
533 -- (a) From each class declaration,
534 -- generate any default-method bindings
535 -- (b) From each instance decl
536 -- generate the dfun binding
538 tcInstDecls2 tycl_decls inst_decls
539 = do { -- (a) Default methods from class decls
540 let class_decls = filter (isClassDecl . unLoc) tycl_decls
541 ; dm_binds_s <- mapM tcClassDecl2 class_decls
542 ; let dm_binds = unionManyBags dm_binds_s
544 -- (b) instance declarations
545 ; let dm_ids = collectHsBindsBinders dm_binds
546 -- Add the default method Ids (again)
547 -- See Note [Default methods and instances]
548 ; inst_binds_s <- tcExtendIdEnv dm_ids $
549 mapM tcInstDecl2 inst_decls
552 ; return (dm_binds `unionBags` unionManyBags inst_binds_s) }
554 tcInstDecl2 :: InstInfo Name -> TcM (LHsBinds Id)
555 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = ibinds })
556 = recoverM (return emptyLHsBinds) $
558 addErrCtxt (instDeclCtxt2 (idType dfun_id)) $
559 tc_inst_decl2 dfun_id ibinds
561 dfun_id = instanceDFunId ispec
562 loc = getSrcSpan dfun_id
565 See Note [Default methods and instances]
566 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
567 The default method Ids are already in the type environment (see Note
568 [Default method Ids and Template Haskell] in TcTyClsDcls), BUT they
569 don't have their InlinePragmas yet. Usually that would not matter,
570 because the simplifier propagates information from binding site to
571 use. But, unusually, when compiling instance decls we *copy* the
572 INLINE pragma from the default method to the method for that
573 particular operation (see Note [INLINE and default methods] below).
575 So right here in tcInstDecl2 we must re-extend the type envt with
576 the default method Ids replete with their INLINE pragmas. Urk.
579 tc_inst_decl2 :: Id -> InstBindings Name -> TcM (LHsBinds Id)
580 -- Returns a binding for the dfun
582 ------------------------
583 -- Derived newtype instances; surprisingly tricky!
585 -- class Show a => Foo a b where ...
586 -- newtype N a = MkN (Tree [a]) deriving( Foo Int )
588 -- The newtype gives an FC axiom looking like
589 -- axiom CoN a :: N a ~ Tree [a]
590 -- (see Note [Newtype coercions] in TyCon for this unusual form of axiom)
592 -- So all need is to generate a binding looking like:
593 -- dfunFooT :: forall a. (Foo Int (Tree [a], Show (N a)) => Foo Int (N a)
594 -- dfunFooT = /\a. \(ds:Show (N a)) (df:Foo (Tree [a])).
595 -- case df `cast` (Foo Int (sym (CoN a))) of
596 -- Foo _ op1 .. opn -> Foo ds op1 .. opn
598 -- If there are no superclasses, matters are simpler, because we don't need the case
599 -- see Note [Newtype deriving superclasses] in TcDeriv.lhs
601 tc_inst_decl2 dfun_id (NewTypeDerived coi _)
602 = do { let rigid_info = InstSkol
603 origin = SigOrigin rigid_info
604 inst_ty = idType dfun_id
605 inst_tvs = fst (tcSplitForAllTys inst_ty)
606 ; (inst_tvs', theta, inst_head_ty) <- tcSkolSigType rigid_info inst_ty
607 -- inst_head_ty is a PredType
609 ; let (cls, cls_inst_tys) = tcSplitDFunHead inst_head_ty
610 (class_tyvars, sc_theta, _, _) = classBigSig cls
611 cls_tycon = classTyCon cls
612 sc_theta' = substTheta (zipOpenTvSubst class_tyvars cls_inst_tys) sc_theta
613 Just (initial_cls_inst_tys, last_ty) = snocView cls_inst_tys
617 IdCo -> (last_ty, idHsWrapper)
618 ACo co -> (snd (coercionKind co'), WpCast (mk_full_coercion co'))
620 co' = substTyWith inst_tvs (mkTyVarTys inst_tvs') co
621 -- NB: the free variable of coi are bound by the
622 -- universally quantified variables of the dfun_id
623 -- This is weird, and maybe we should make NewTypeDerived
624 -- carry a type-variable list too; but it works fine
626 -----------------------
628 -- The inst_head looks like (C s1 .. sm (T a1 .. ak))
629 -- But we want the coercion (C s1 .. sm (sym (CoT a1 .. ak)))
630 -- with kind (C s1 .. sm (T a1 .. ak) ~ C s1 .. sm <rep_ty>)
631 -- where rep_ty is the (eta-reduced) type rep of T
632 -- So we just replace T with CoT, and insert a 'sym'
633 -- NB: we know that k will be >= arity of CoT, because the latter fully eta-reduced
635 mk_full_coercion co = mkTyConApp cls_tycon
636 (initial_cls_inst_tys ++ [mkSymCoercion co])
637 -- Full coercion : (Foo Int (Tree [a]) ~ Foo Int (N a)
639 rep_pred = mkClassPred cls (initial_cls_inst_tys ++ [rep_ty])
640 -- In our example, rep_pred is (Foo Int (Tree [a]))
642 ; sc_loc <- getInstLoc InstScOrigin
643 ; sc_dicts <- newDictBndrs sc_loc sc_theta'
644 ; inst_loc <- getInstLoc origin
645 ; dfun_dicts <- newDictBndrs inst_loc theta
646 ; rep_dict <- newDictBndr inst_loc rep_pred
647 ; this_dict <- newDictBndr inst_loc (mkClassPred cls cls_inst_tys)
649 -- Figure out bindings for the superclass context from dfun_dicts
650 -- Don't include this_dict in the 'givens', else
651 -- sc_dicts get bound by just selecting from this_dict!!
652 ; sc_binds <- addErrCtxt superClassCtxt $
653 tcSimplifySuperClasses inst_loc this_dict dfun_dicts
656 -- It's possible that the superclass stuff might unified something
657 -- in the envt with one of the clas_tyvars
658 ; checkSigTyVars inst_tvs'
660 ; let coerced_rep_dict = wrapId wrapper (instToId rep_dict)
662 ; body <- make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
663 ; let dict_bind = mkVarBind (instToId this_dict) (noLoc body)
665 ; return (unitBag $ noLoc $
666 AbsBinds inst_tvs' (map instToVar dfun_dicts)
667 [(inst_tvs', dfun_id, instToId this_dict, noSpecPrags)]
668 (dict_bind `consBag` sc_binds)) }
670 -----------------------
671 -- (make_body C tys scs coreced_rep_dict)
673 -- (case coerced_rep_dict of { C _ ops -> C scs ops })
674 -- But if there are no superclasses, it returns just coerced_rep_dict
675 -- See Note [Newtype deriving superclasses] in TcDeriv.lhs
677 make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
678 | null sc_dicts -- Case (a)
679 = return coerced_rep_dict
680 | otherwise -- Case (b)
681 = do { op_ids <- newSysLocalIds (fsLit "op") op_tys
682 ; dummy_sc_dict_ids <- newSysLocalIds (fsLit "sc") (map idType sc_dict_ids)
683 ; let the_pat = ConPatOut { pat_con = noLoc cls_data_con, pat_tvs = [],
684 pat_dicts = dummy_sc_dict_ids,
685 pat_binds = emptyLHsBinds,
686 pat_args = PrefixCon (map nlVarPat op_ids),
688 the_match = mkSimpleMatch [noLoc the_pat] the_rhs
689 the_rhs = mkHsConApp cls_data_con cls_inst_tys $
690 map HsVar (sc_dict_ids ++ op_ids)
692 -- Warning: this HsCase scrutinises a value with a PredTy, which is
693 -- never otherwise seen in Haskell source code. It'd be
694 -- nicer to generate Core directly!
695 ; return (HsCase (noLoc coerced_rep_dict) $
696 MatchGroup [the_match] (mkFunTy pat_ty pat_ty)) }
698 sc_dict_ids = map instToId sc_dicts
699 pat_ty = mkTyConApp cls_tycon cls_inst_tys
700 cls_data_con = head (tyConDataCons cls_tycon)
701 cls_arg_tys = dataConInstArgTys cls_data_con cls_inst_tys
702 op_tys = dropList sc_dict_ids cls_arg_tys
704 ------------------------
705 -- Ordinary instances
707 tc_inst_decl2 dfun_id (VanillaInst monobinds uprags standalone_deriv)
708 = do { let rigid_info = InstSkol
709 inst_ty = idType dfun_id
710 loc = getSrcSpan dfun_id
712 -- Instantiate the instance decl with skolem constants
713 ; (inst_tyvars', dfun_theta', inst_head') <- tcSkolSigType rigid_info inst_ty
714 -- These inst_tyvars' scope over the 'where' part
715 -- Those tyvars are inside the dfun_id's type, which is a bit
716 -- bizarre, but OK so long as you realise it!
718 (clas, inst_tys') = tcSplitDFunHead inst_head'
719 (class_tyvars, sc_theta, sc_sels, op_items) = classBigSig clas
721 -- Instantiate the super-class context with inst_tys
722 sc_theta' = substTheta (zipOpenTvSubst class_tyvars inst_tys') sc_theta
723 origin = SigOrigin rigid_info
725 -- Create dictionary Ids from the specified instance contexts.
726 ; inst_loc <- getInstLoc origin
727 ; dfun_dicts <- newDictBndrs inst_loc dfun_theta' -- Includes equalities
728 ; this_dict <- newDictBndr inst_loc (mkClassPred clas inst_tys')
729 -- Default-method Ids may be mentioned in synthesised RHSs,
730 -- but they'll already be in the environment.
733 -- Cook up a binding for "this = df d1 .. dn",
734 -- to use in each method binding
735 -- Need to clone the dict in case it is floated out, and
736 -- then clashes with its friends
737 ; cloned_this <- cloneDict this_dict
738 ; let cloned_this_bind = mkVarBind (instToId cloned_this) $
739 L loc $ wrapId app_wrapper dfun_id
740 app_wrapper = mkWpApps dfun_lam_vars <.> mkWpTyApps (mkTyVarTys inst_tyvars')
741 dfun_lam_vars = map instToVar dfun_dicts -- Includes equalities
743 | null inst_tyvars' && null dfun_theta' = (this_dict, emptyBag)
744 | otherwise = (cloned_this, unitBag cloned_this_bind)
746 -- Deal with 'SPECIALISE instance' pragmas
747 -- See Note [SPECIALISE instance pragmas]
748 ; let spec_inst_sigs = filter isSpecInstLSig uprags
749 -- The filter removes the pragmas for methods
750 ; spec_inst_prags <- mapM (wrapLocM (tcSpecInst dfun_id)) spec_inst_sigs
752 -- Typecheck the methods
753 ; let prag_fn = mkPragFun uprags monobinds
754 tc_meth = tcInstanceMethod loc standalone_deriv
758 prag_fn spec_inst_prags monobinds
760 ; (meth_ids, meth_binds) <- tcExtendTyVarEnv inst_tyvars' $
761 mapAndUnzipM tc_meth op_items
763 -- Figure out bindings for the superclass context
764 ; sc_loc <- getInstLoc InstScOrigin
765 ; sc_dicts <- newDictOccs sc_loc sc_theta' -- These are wanted
766 ; let tc_sc = tcSuperClass inst_loc inst_tyvars' dfun_dicts nested_this_pair
767 ; (sc_ids, sc_binds) <- mapAndUnzipM tc_sc (sc_sels `zip` sc_dicts)
769 -- It's possible that the superclass stuff might unified
770 -- something in the envt with one of the inst_tyvars'
771 ; checkSigTyVars inst_tyvars'
773 -- Create the result bindings
774 ; let dict_constr = classDataCon clas
775 this_dict_id = instToId this_dict
776 dict_bind = mkVarBind this_dict_id dict_rhs
777 dict_rhs = foldl mk_app inst_constr sc_meth_ids
778 sc_meth_ids = sc_ids ++ meth_ids
779 inst_constr = L loc $ wrapId (mkWpTyApps inst_tys')
780 (dataConWrapId dict_constr)
781 -- We don't produce a binding for the dict_constr; instead we
782 -- rely on the simplifier to unfold this saturated application
783 -- We do this rather than generate an HsCon directly, because
784 -- it means that the special cases (e.g. dictionary with only one
785 -- member) are dealt with by the common MkId.mkDataConWrapId code rather
786 -- than needing to be repeated here.
788 mk_app :: LHsExpr Id -> Id -> LHsExpr Id
789 mk_app fun arg_id = L loc (HsApp fun (L loc (wrapId arg_wrapper arg_id)))
790 arg_wrapper = mkWpApps dfun_lam_vars <.> mkWpTyApps (mkTyVarTys inst_tyvars')
792 -- Do not inline the dfun; instead give it a magic DFunFunfolding
793 -- See Note [ClassOp/DFun selection]
794 -- See also note [Single-method classes]
795 dfun_id_w_fun = dfun_id
796 `setIdUnfolding` mkDFunUnfolding inst_ty (map Var sc_meth_ids)
797 `setInlinePragma` dfunInlinePragma
802 [(inst_tyvars', dfun_id_w_fun, this_dict_id, SpecPrags spec_inst_prags)]
805 ; showLIE (text "instance")
806 ; return (unitBag (L loc main_bind) `unionBags`
807 listToBag meth_binds `unionBags`
812 -- Create the result bindings
813 ; let this_dict_id = instToId this_dict
814 arg_ids = sc_ids ++ meth_ids
815 arg_binds = listToBag meth_binds `unionBags`
818 ; showLIE (text "instance")
819 ; case newTyConCo_maybe (classTyCon clas) of
820 Nothing -- A multi-method class
821 -> return (unitBag (L loc data_bind) `unionBags` arg_binds)
823 data_dfun_id = dfun_id -- Do not inline; instead give it a magic DFunFunfolding
824 -- See Note [ClassOp/DFun selection]
825 `setIdUnfolding` mkDFunUnfolding dict_constr arg_ids
826 `setInlinePragma` dfunInlinePragma
828 data_bind = AbsBinds inst_tyvars' dfun_lam_vars
829 [(inst_tyvars', data_dfun_id, this_dict_id, spec_inst_prags)]
832 dict_bind = mkVarBind this_dict_id dict_rhs
833 dict_rhs = foldl mk_app inst_constr arg_ids
834 dict_constr = classDataCon clas
835 inst_constr = L loc $ wrapId (mkWpTyApps inst_tys')
836 (dataConWrapId dict_constr)
837 -- We don't produce a binding for the dict_constr; instead we
838 -- rely on the simplifier to unfold this saturated application
839 -- We do this rather than generate an HsCon directly, because
840 -- it means that the special cases (e.g. dictionary with only one
841 -- member) are dealt with by the common MkId.mkDataConWrapId code rather
842 -- than needing to be repeated here.
844 mk_app :: LHsExpr Id -> Id -> LHsExpr Id
845 mk_app fun arg_id = L loc (HsApp fun (L loc (wrapId arg_wrapper arg_id)))
846 arg_wrapper = mkWpApps dfun_lam_vars <.> mkWpTyApps (mkTyVarTys inst_tyvars')
848 Just the_nt_co -- (Just co) for a single-method class
849 -> return (unitBag (L loc nt_bind) `unionBags` arg_binds)
851 nt_dfun_id = dfun_id -- Just let the dfun inline; see Note [Single-method classes]
852 `setInlinePragma` alwaysInlinePragma
854 local_nt_dfun = setIdType this_dict_id inst_ty -- A bit of a hack, but convenient
856 nt_bind = AbsBinds [] []
857 [([], nt_dfun_id, local_nt_dfun, spec_inst_prags)]
858 (unitBag (mkVarBind local_nt_dfun (L loc (wrapId nt_cast the_meth_id))))
860 the_meth_id = ASSERT( length arg_ids == 1 ) head arg_ids
861 nt_cast = WpCast $ mkPiTypes (inst_tyvars' ++ dfun_lam_vars) $
862 mkSymCoercion (mkTyConApp the_nt_co inst_tys')
865 ------------------------------
866 tcSuperClass :: InstLoc -> [TyVar] -> [Inst]
867 -> (Inst, LHsBinds Id)
868 -> (Id, Inst) -> TcM (Id, LHsBind Id)
869 -- Build a top level decl like
870 -- sc_op = /\a \d. let this = ... in
873 -- The "this" part is just-in-case (discarded if not used)
874 -- See Note [Recursive superclasses]
875 tcSuperClass inst_loc tyvars dicts (this_dict, this_bind)
877 = addErrCtxt superClassCtxt $
878 do { sc_binds <- tcSimplifySuperClasses inst_loc
879 this_dict dicts [sc_dict]
880 -- Don't include this_dict in the 'givens', else
881 -- sc_dicts get bound by just selecting from this_dict!!
884 ; let sc_op_ty = mkSigmaTy tyvars (map dictPred dicts)
885 (mkPredTy (dictPred sc_dict))
886 sc_op_name = mkDerivedInternalName mkClassOpAuxOcc uniq
888 sc_op_id = mkLocalId sc_op_name sc_op_ty
889 sc_id = instToVar sc_dict
890 sc_op_bind = AbsBinds tyvars
891 (map instToVar dicts)
892 [(tyvars, sc_op_id, sc_id, noSpecPrags)]
893 (this_bind `unionBags` sc_binds)
895 ; return (sc_op_id, noLoc sc_op_bind) }
898 Note [Recursive superclasses]
899 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
900 See Trac #1470 for why we would *like* to add "this_dict" to the
901 available instances here. But we can't do so because then the superclases
902 get satisfied by selection from this_dict, and that leads to an immediate
903 loop. What we need is to add this_dict to Avails without adding its
904 superclasses, and we currently have no way to do that.
906 Note [SPECIALISE instance pragmas]
907 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
910 instance (Ix a, Ix b) => Ix (a,b) where
911 {-# SPECIALISE instance Ix (Int,Int) #-}
914 We do *not* want to make a specialised version of the dictionary
915 function. Rather, we want specialised versions of each method.
916 Thus we should generate something like this:
918 $dfIx :: (Ix a, Ix x) => Ix (a,b)
919 {- DFUN [$crange, ...] -}
920 $dfIx da db = Ix ($crange da db) (...other methods...)
922 $dfIxPair :: (Ix a, Ix x) => Ix (a,b)
923 {- DFUN [$crangePair, ...] -}
924 $dfIxPair = Ix ($crangePair da db) (...other methods...)
926 $crange :: (Ix a, Ix b) -> ((a,b),(a,b)) -> [(a,b)]
927 {-# SPECIALISE $crange :: ((Int,Int),(Int,Int)) -> [(Int,Int)] #-}
928 $crange da db = <blah>
930 {-# RULE range ($dfIx da db) = $crange da db #-}
934 * The RULE is unaffected by the specialisation. We don't want to
935 specialise $dfIx, because then it would need a specialised RULE
936 which is a pain. The single RULE works fine at all specialisations.
937 See Note [How instance declarations are translated] above
939 * Instead, we want to specialise the *method*, $crange
941 In practice, rather than faking up a SPECIALISE pragama for each
942 method (which is painful, since we'd have to figure out its
943 specialised type), we call tcSpecPrag *as if* were going to specialise
944 $dfIx -- you can see that in the call to tcSpecInst. That generates a
945 SpecPrag which, as it turns out, can be used unchanged for each method.
946 The "it turns out" bit is delicate, but it works fine!
949 tcSpecInst :: Id -> Sig Name -> TcM TcSpecPrag
950 tcSpecInst dfun_id prag@(SpecInstSig hs_ty)
951 = addErrCtxt (spec_ctxt prag) $
952 do { let name = idName dfun_id
953 ; (tyvars, theta, tau) <- tcHsInstHead hs_ty
954 ; let spec_ty = mkSigmaTy tyvars theta tau
955 ; co_fn <- tcSubExp (SpecPragOrigin name) (idType dfun_id) spec_ty
956 ; return (SpecPrag co_fn defaultInlinePragma) }
958 spec_ctxt prag = hang (ptext (sLit "In the SPECIALISE pragma")) 2 (ppr prag)
960 tcSpecInst _ _ = panic "tcSpecInst"
963 %************************************************************************
965 Type-checking an instance method
967 %************************************************************************
970 - Make the method bindings, as a [(NonRec, HsBinds)], one per method
971 - Remembering to use fresh Name (the instance method Name) as the binder
972 - Bring the instance method Ids into scope, for the benefit of tcInstSig
973 - Use sig_fn mapping instance method Name -> instance tyvars
975 - Use tcValBinds to do the checking
978 tcInstanceMethod :: SrcSpan -> Bool -> Class -> [TcTyVar] -> [Inst]
980 -> (Inst, LHsBinds Id) -- "This" and its binding
981 -> TcPragFun -- Local prags
982 -> [Located TcSpecPrag] -- Arising from 'SPECLALISE instance'
985 -> TcM (Id, LHsBind Id)
986 -- The returned inst_meth_ids all have types starting
987 -- forall tvs. theta => ...
989 tcInstanceMethod loc standalone_deriv clas tyvars dfun_dicts inst_tys
990 (this_dict, this_dict_bind)
991 prag_fn spec_inst_prags binds_in (sel_id, dm_info)
992 = do { uniq <- newUnique
993 ; let meth_name = mkDerivedInternalName mkClassOpAuxOcc uniq sel_name
994 ; local_meth_name <- newLocalName sel_name
995 -- Base the local_meth_name on the selector name, becuase
996 -- type errors from tcInstanceMethodBody come from here
998 ; let local_meth_ty = instantiateMethod clas sel_id inst_tys
999 meth_ty = mkSigmaTy tyvars (map dictPred dfun_dicts) local_meth_ty
1000 meth_id = mkLocalId meth_name meth_ty
1001 local_meth_id = mkLocalId local_meth_name local_meth_ty
1005 = add_meth_ctxt rn_bind $
1006 do { (meth_id1, spec_prags) <- tcPrags NonRecursive False True
1007 meth_id (prag_fn sel_name)
1008 ; bind <- tcInstanceMethodBody (instLoc this_dict)
1010 ([this_dict], this_dict_bind)
1011 meth_id1 local_meth_id
1013 (SpecPrags (spec_inst_prags ++ spec_prags))
1015 ; return (meth_id1, bind) }
1018 tc_default :: DefMeth -> TcM (Id, LHsBind Id)
1019 -- The user didn't supply a method binding, so we have to make
1020 -- up a default binding, in a way depending on the default-method info
1022 tc_default NoDefMeth -- No default method at all
1023 = do { warnMissingMethod sel_id
1024 ; return (meth_id, mkVarBind meth_id $
1025 mkLHsWrap lam_wrapper error_rhs) }
1027 tc_default GenDefMeth -- Derivable type classes stuff
1028 = do { meth_bind <- mkGenericDefMethBind clas inst_tys sel_id local_meth_name
1029 ; tc_body meth_bind }
1031 tc_default (DefMeth dm_name) -- An polymorphic default method
1032 = do { -- Build the typechecked version directly,
1033 -- without calling typecheck_method;
1034 -- see Note [Default methods in instances]
1035 -- Generate /\as.\ds. let this = df as ds
1036 -- in $dm inst_tys this
1037 -- The 'let' is necessary only because HsSyn doesn't allow
1038 -- you to apply a function to a dictionary *expression*.
1040 ; dm_id <- tcLookupId dm_name
1041 ; let dm_inline_prag = idInlinePragma dm_id
1042 rhs = HsWrap (WpApp (instToId this_dict) <.> mkWpTyApps inst_tys) $
1045 meth_bind = L loc $ VarBind { var_id = local_meth_id
1046 , var_rhs = L loc rhs
1047 , var_inline = False }
1048 meth_id1 = meth_id `setInlinePragma` dm_inline_prag
1049 -- Copy the inline pragma (if any) from the default
1050 -- method to this version. Note [INLINE and default methods]
1052 bind = AbsBinds { abs_tvs = tyvars, abs_dicts = dfun_lam_vars
1053 , abs_exports = [( tyvars, meth_id1, local_meth_id
1054 , SpecPrags spec_inst_prags)]
1055 , abs_binds = this_dict_bind `unionBags` unitBag meth_bind }
1056 -- Default methods in an instance declaration can't have their own
1057 -- INLINE or SPECIALISE pragmas. It'd be possible to allow them, but
1058 -- currently they are rejected with
1059 -- "INLINE pragma lacks an accompanying binding"
1061 ; return (meth_id1, L loc bind) }
1063 ; case findMethodBind sel_name local_meth_name binds_in of
1064 Just user_bind -> tc_body user_bind -- User-supplied method binding
1065 Nothing -> tc_default dm_info -- None supplied
1068 sel_name = idName sel_id
1070 meth_sig_fn _ = Just [] -- The 'Just' says "yes, there's a type sig"
1071 -- But there are no scoped type variables from local_method_id
1072 -- Only the ones from the instance decl itself, which are already
1073 -- in scope. Example:
1074 -- class C a where { op :: forall b. Eq b => ... }
1075 -- instance C [c] where { op = <rhs> }
1076 -- In <rhs>, 'c' is scope but 'b' is not!
1078 error_rhs = L loc $ HsApp error_fun error_msg
1079 error_fun = L loc $ wrapId (WpTyApp meth_tau) nO_METHOD_BINDING_ERROR_ID
1080 error_msg = L loc (HsLit (HsStringPrim (mkFastString error_string)))
1081 meth_tau = funResultTy (applyTys (idType sel_id) inst_tys)
1082 error_string = showSDoc (hcat [ppr loc, text "|", ppr sel_id ])
1084 dfun_lam_vars = map instToVar dfun_dicts
1085 lam_wrapper = mkWpTyLams tyvars <.> mkWpLams dfun_lam_vars
1087 -- For instance decls that come from standalone deriving clauses
1088 -- we want to print out the full source code if there's an error
1089 -- because otherwise the user won't see the code at all
1090 add_meth_ctxt rn_bind thing
1091 | standalone_deriv = addLandmarkErrCtxt (derivBindCtxt clas inst_tys rn_bind) thing
1094 wrapId :: HsWrapper -> id -> HsExpr id
1095 wrapId wrapper id = mkHsWrap wrapper (HsVar id)
1097 derivBindCtxt :: Class -> [Type ] -> LHsBind Name -> SDoc
1098 derivBindCtxt clas tys bind
1099 = vcat [ ptext (sLit "When typechecking a standalone-derived method for")
1100 <+> quotes (pprClassPred clas tys) <> colon
1101 , nest 2 $ pprSetDepth AllTheWay $ ppr bind ]
1103 warnMissingMethod :: Id -> TcM ()
1104 warnMissingMethod sel_id
1105 = do { warn <- doptM Opt_WarnMissingMethods
1106 ; warnTc (warn -- Warn only if -fwarn-missing-methods
1107 && not (startsWithUnderscore (getOccName sel_id)))
1108 -- Don't warn about _foo methods
1109 (ptext (sLit "No explicit method nor default method for")
1110 <+> quotes (ppr sel_id)) }
1113 Note [Export helper functions]
1114 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1115 We arrange to export the "helper functions" of an instance declaration,
1116 so that they are not subject to preInlineUnconditionally, even if their
1117 RHS is trivial. Reason: they are mentioned in the DFunUnfolding of
1118 the dict fun as Ids, not as CoreExprs, so we can't substitute a
1119 non-variable for them.
1121 We could change this by making DFunUnfoldings have CoreExprs, but it
1122 seems a bit simpler this way.
1124 Note [Default methods in instances]
1125 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1132 instance Baz Int Int
1134 From the class decl we get
1136 $dmfoo :: forall v x. Baz v x => x -> x
1139 Notice that the type is ambiguous. That's fine, though. The instance
1142 $dBazIntInt = MkBaz fooIntInt
1143 fooIntInt = $dmfoo Int Int $dBazIntInt
1145 BUT this does mean we must generate the dictionary translation of
1146 fooIntInt directly, rather than generating source-code and
1147 type-checking it. That was the bug in Trac #1061. In any case it's
1148 less work to generate the translated version!
1150 Note [INLINE and default methods]
1151 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1152 Default methods need special case. They are supposed to behave rather like
1153 macros. For exmample
1156 op1, op2 :: Bool -> a -> a
1159 op1 b x = op2 (not b) x
1161 instance Foo Int where
1162 -- op1 via default method
1165 The instance declaration should behave
1167 just as if 'op1' had been defined with the
1168 code, and INLINE pragma, from its original
1171 That is, just as if you'd written
1173 instance Foo Int where
1177 op1 b x = op2 (not b) x
1179 So for the above example we generate:
1182 {-# INLINE $dmop1 #-}
1183 -- $dmop1 has an InlineCompulsory unfolding
1184 $dmop1 d b x = op2 d (not b) x
1186 $fFooInt = MkD $cop1 $cop2
1188 {-# INLINE $cop1 #-}
1189 $cop1 = $dmop1 $fFooInt
1195 * We *copy* any INLINE pragma from the default method $dmop1 to the
1196 instance $cop1. Otherwise we'll just inline the former in the
1197 latter and stop, which isn't what the user expected
1199 * Regardless of its pragma, we give the default method an
1200 unfolding with an InlineCompulsory source. That means
1201 that it'll be inlined at every use site, notably in
1202 each instance declaration, such as $cop1. This inlining
1203 must happen even though
1204 a) $dmop1 is not saturated in $cop1
1205 b) $cop1 itself has an INLINE pragma
1207 It's vital that $dmop1 *is* inlined in this way, to allow the mutual
1208 recursion between $fooInt and $cop1 to be broken
1210 * To communicate the need for an InlineCompulsory to the desugarer
1211 (which makes the Unfoldings), we use the IsDefaultMethod constructor
1215 %************************************************************************
1217 \subsection{Error messages}
1219 %************************************************************************
1222 instDeclCtxt1 :: LHsType Name -> SDoc
1223 instDeclCtxt1 hs_inst_ty
1224 = inst_decl_ctxt (case unLoc hs_inst_ty of
1225 HsForAllTy _ _ _ (L _ (HsPredTy pred)) -> ppr pred
1226 HsPredTy pred -> ppr pred
1227 _ -> ppr hs_inst_ty) -- Don't expect this
1228 instDeclCtxt2 :: Type -> SDoc
1229 instDeclCtxt2 dfun_ty
1230 = inst_decl_ctxt (ppr (mkClassPred cls tys))
1232 (_,cls,tys) = tcSplitDFunTy dfun_ty
1234 inst_decl_ctxt :: SDoc -> SDoc
1235 inst_decl_ctxt doc = ptext (sLit "In the instance declaration for") <+> quotes doc
1237 superClassCtxt :: SDoc
1238 superClassCtxt = ptext (sLit "When checking the super-classes of an instance declaration")
1240 atInstCtxt :: Name -> SDoc
1241 atInstCtxt name = ptext (sLit "In the associated type instance for") <+>
1244 mustBeVarArgErr :: Type -> SDoc
1245 mustBeVarArgErr ty =
1246 sep [ ptext (sLit "Arguments that do not correspond to a class parameter") <+>
1247 ptext (sLit "must be variables")
1248 , ptext (sLit "Instead of a variable, found") <+> ppr ty
1251 wrongATArgErr :: Type -> Type -> SDoc
1252 wrongATArgErr ty instTy =
1253 sep [ ptext (sLit "Type indexes must match class instance head")
1254 , ptext (sLit "Found") <+> quotes (ppr ty)
1255 <+> ptext (sLit "but expected") <+> quotes (ppr instTy)