dfe1efb679f113bd520948d1136d209752759d5d
[ghc-hetmet.git] / compiler / typecheck / TcInstDcls.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5
6 TcInstDecls: Typechecking instance declarations
7
8 \begin{code}
9 module TcInstDcls ( tcInstDecls1, tcInstDecls2 ) where
10
11 import HsSyn
12 import TcBinds
13 import TcTyClsDecls
14 import TcClassDcl
15 import TcPat( addInlinePrags )
16 import TcRnMonad
17 import TcMType
18 import TcType
19 import Inst
20 import InstEnv
21 import FamInst
22 import FamInstEnv
23 import MkCore   ( nO_METHOD_BINDING_ERROR_ID )
24 import TcDeriv
25 import TcEnv
26 import RnSource ( addTcgDUs )
27 import TcHsType
28 import TcUnify
29 import Type
30 import Coercion
31 import TyCon
32 import DataCon
33 import Class
34 import Var
35 import VarSet
36 import CoreUtils  ( mkPiTypes )
37 import CoreUnfold ( mkDFunUnfolding )
38 import CoreSyn    ( Expr(Var), DFunArg(..), CoreExpr )
39 import Id
40 import MkId
41 import Name
42 import NameSet
43 import DynFlags
44 import SrcLoc
45 import Util
46 import Outputable
47 import Bag
48 import BasicTypes
49 import HscTypes
50 import FastString
51 import Maybes   ( orElse )
52 import Data.Maybe
53 import Control.Monad
54 import Data.List
55
56 #include "HsVersions.h"
57 \end{code}
58
59 Typechecking instance declarations is done in two passes. The first
60 pass, made by @tcInstDecls1@, collects information to be used in the
61 second pass.
62
63 This pre-processed info includes the as-yet-unprocessed bindings
64 inside the instance declaration.  These are type-checked in the second
65 pass, when the class-instance envs and GVE contain all the info from
66 all the instance and value decls.  Indeed that's the reason we need
67 two passes over the instance decls.
68
69
70 Note [How instance declarations are translated]
71 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
72 Here is how we translation instance declarations into Core
73
74 Running example:
75         class C a where
76            op1, op2 :: Ix b => a -> b -> b
77            op2 = <dm-rhs>
78
79         instance C a => C [a]
80            {-# INLINE [2] op1 #-}
81            op1 = <rhs>
82 ===>
83         -- Method selectors
84         op1,op2 :: forall a. C a => forall b. Ix b => a -> b -> b
85         op1 = ...
86         op2 = ...
87
88         -- Default methods get the 'self' dictionary as argument
89         -- so they can call other methods at the same type
90         -- Default methods get the same type as their method selector
91         $dmop2 :: forall a. C a => forall b. Ix b => a -> b -> b
92         $dmop2 = /\a. \(d:C a). /\b. \(d2: Ix b). <dm-rhs>
93                -- NB: type variables 'a' and 'b' are *both* in scope in <dm-rhs>
94                -- Note [Tricky type variable scoping]
95
96         -- A top-level definition for each instance method
97         -- Here op1_i, op2_i are the "instance method Ids"
98         -- The INLINE pragma comes from the user pragma
99         {-# INLINE [2] op1_i #-}  -- From the instance decl bindings
100         op1_i, op2_i :: forall a. C a => forall b. Ix b => [a] -> b -> b
101         op1_i = /\a. \(d:C a). 
102                let this :: C [a]
103                    this = df_i a d
104                      -- Note [Subtle interaction of recursion and overlap]
105
106                    local_op1 :: forall b. Ix b => [a] -> b -> b
107                    local_op1 = <rhs>
108                      -- Source code; run the type checker on this
109                      -- NB: Type variable 'a' (but not 'b') is in scope in <rhs>
110                      -- Note [Tricky type variable scoping]
111
112                in local_op1 a d
113
114         op2_i = /\a \d:C a. $dmop2 [a] (df_i a d) 
115
116         -- The dictionary function itself
117         {-# NOINLINE CONLIKE df_i #-}   -- Never inline dictionary functions
118         df_i :: forall a. C a -> C [a]
119         df_i = /\a. \d:C a. MkC (op1_i a d) (op2_i a d)
120                 -- But see Note [Default methods in instances]
121                 -- We can't apply the type checker to the default-method call
122
123         -- Use a RULE to short-circuit applications of the class ops
124         {-# RULE "op1@C[a]" forall a, d:C a. 
125                             op1 [a] (df_i d) = op1_i a d #-}
126
127 Note [Instances and loop breakers]
128 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
129 * Note that df_i may be mutually recursive with both op1_i and op2_i.
130   It's crucial that df_i is not chosen as the loop breaker, even 
131   though op1_i has a (user-specified) INLINE pragma.
132
133 * Instead the idea is to inline df_i into op1_i, which may then select
134   methods from the MkC record, and thereby break the recursion with
135   df_i, leaving a *self*-recurisve op1_i.  (If op1_i doesn't call op at
136   the same type, it won't mention df_i, so there won't be recursion in
137   the first place.)  
138
139 * If op1_i is marked INLINE by the user there's a danger that we won't
140   inline df_i in it, and that in turn means that (since it'll be a
141   loop-breaker because df_i isn't), op1_i will ironically never be 
142   inlined.  But this is OK: the recursion breaking happens by way of
143   a RULE (the magic ClassOp rule above), and RULES work inside InlineRule
144   unfoldings. See Note [RULEs enabled in SimplGently] in SimplUtils
145
146 Note [ClassOp/DFun selection]
147 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
148 One thing we see a lot is stuff like
149     op2 (df d1 d2)
150 where 'op2' is a ClassOp and 'df' is DFun.  Now, we could inline *both*
151 'op2' and 'df' to get
152      case (MkD ($cop1 d1 d2) ($cop2 d1 d2) ... of
153        MkD _ op2 _ _ _ -> op2
154 And that will reduce to ($cop2 d1 d2) which is what we wanted.
155
156 But it's tricky to make this work in practice, because it requires us to 
157 inline both 'op2' and 'df'.  But neither is keen to inline without having
158 seen the other's result; and it's very easy to get code bloat (from the 
159 big intermediate) if you inline a bit too much.
160
161 Instead we use a cunning trick.
162  * We arrange that 'df' and 'op2' NEVER inline.  
163
164  * We arrange that 'df' is ALWAYS defined in the sylised form
165       df d1 d2 = MkD ($cop1 d1 d2) ($cop2 d1 d2) ...
166
167  * We give 'df' a magical unfolding (DFunUnfolding [$cop1, $cop2, ..])
168    that lists its methods.
169
170  * We make CoreUnfold.exprIsConApp_maybe spot a DFunUnfolding and return
171    a suitable constructor application -- inlining df "on the fly" as it 
172    were.
173
174  * We give the ClassOp 'op2' a BuiltinRule that extracts the right piece
175    iff its argument satisfies exprIsConApp_maybe.  This is done in
176    MkId mkDictSelId
177
178  * We make 'df' CONLIKE, so that shared uses stil match; eg
179       let d = df d1 d2
180       in ...(op2 d)...(op1 d)...
181
182 Note [Single-method classes]
183 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
184 If the class has just one method (or, more accurately, just one element
185 of {superclasses + methods}), then we use a different strategy.
186
187    class C a where op :: a -> a
188    instance C a => C [a] where op = <blah>
189
190 We translate the class decl into a newtype, which just gives a
191 top-level axiom. The "constructor" MkC expands to a cast, as does the
192 class-op selector.
193
194    axiom Co:C a :: C a ~ (a->a)
195
196    op :: forall a. C a -> (a -> a)
197    op a d = d |> (Co:C a)
198
199    MkC :: forall a. (a->a) -> C a
200    MkC = /\a.\op. op |> (sym Co:C a)
201
202 The clever RULE stuff doesn't work now, because ($df a d) isn't
203 a constructor application, so exprIsConApp_maybe won't return 
204 Just <blah>.
205
206 Instead, we simply rely on the fact that casts are cheap:
207
208    $df :: forall a. C a => C [a]
209    {-# INLINE df #-}  -- NB: INLINE this
210    $df = /\a. \d. MkC [a] ($cop_list a d)
211        = $cop_list |> forall a. C a -> (sym (Co:C [a]))
212
213    $cop_list :: forall a. C a => [a] -> [a]
214    $cop_list = <blah>
215
216 So if we see
217    (op ($df a d))
218 we'll inline 'op' and '$df', since both are simply casts, and
219 good things happen.
220
221 Why do we use this different strategy?  Because otherwise we
222 end up with non-inlined dictionaries that look like
223     $df = $cop |> blah
224 which adds an extra indirection to every use, which seems stupid.  See
225 Trac #4138 for an example (although the regression reported there
226 wasn't due to the indirction).
227
228 There is an awkward wrinkle though: we want to be very 
229 careful when we have
230     instance C a => C [a] where
231       {-# INLINE op #-}
232       op = ...
233 then we'll get an INLINE pragma on $cop_list but it's important that
234 $cop_list only inlines when it's applied to *two* arguments (the
235 dictionary and the list argument).  So we nust not eta-expand $df
236 above.  We ensure that this doesn't happen by putting an INLINE 
237 pragma on the dfun itself; after all, it ends up being just a cast.
238
239 There is one more dark corner to the INLINE story, even more deeply 
240 buried.  Consider this (Trac #3772):
241
242     class DeepSeq a => C a where
243       gen :: Int -> a
244
245     instance C a => C [a] where
246       gen n = ...
247
248     class DeepSeq a where
249       deepSeq :: a -> b -> b
250
251     instance DeepSeq a => DeepSeq [a] where
252       {-# INLINE deepSeq #-}
253       deepSeq xs b = foldr deepSeq b xs
254
255 That gives rise to these defns:
256
257     $cdeepSeq :: DeepSeq a -> [a] -> b -> b
258     -- User INLINE( 3 args )!
259     $cdeepSeq a (d:DS a) b (x:[a]) (y:b) = ...
260
261     $fDeepSeq[] :: DeepSeq a -> DeepSeq [a]
262     -- DFun (with auto INLINE pragma)
263     $fDeepSeq[] a d = $cdeepSeq a d |> blah
264
265     $cp1 a d :: C a => DeepSep [a]
266     -- We don't want to eta-expand this, lest
267     -- $cdeepSeq gets inlined in it!
268     $cp1 a d = $fDeepSep[] a (scsel a d)
269
270     $fC[] :: C a => C [a]
271     -- Ordinary DFun
272     $fC[] a d = MkC ($cp1 a d) ($cgen a d)
273
274 Here $cp1 is the code that generates the superclass for C [a].  The
275 issue is this: we must not eta-expand $cp1 either, or else $fDeepSeq[]
276 and then $cdeepSeq will inline there, which is definitely wrong.  Like
277 on the dfun, we solve this by adding an INLINE pragma to $cp1.
278
279 Note [Subtle interaction of recursion and overlap]
280 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
281 Consider this
282   class C a where { op1,op2 :: a -> a }
283   instance C a => C [a] where
284     op1 x = op2 x ++ op2 x
285     op2 x = ...
286   instance C [Int] where
287     ...
288
289 When type-checking the C [a] instance, we need a C [a] dictionary (for
290 the call of op2).  If we look up in the instance environment, we find
291 an overlap.  And in *general* the right thing is to complain (see Note
292 [Overlapping instances] in InstEnv).  But in *this* case it's wrong to
293 complain, because we just want to delegate to the op2 of this same
294 instance.  
295
296 Why is this justified?  Because we generate a (C [a]) constraint in 
297 a context in which 'a' cannot be instantiated to anything that matches
298 other overlapping instances, or else we would not be excecuting this
299 version of op1 in the first place.
300
301 It might even be a bit disguised:
302
303   nullFail :: C [a] => [a] -> [a]
304   nullFail x = op2 x ++ op2 x
305
306   instance C a => C [a] where
307     op1 x = nullFail x
308
309 Precisely this is used in package 'regex-base', module Context.hs.
310 See the overlapping instances for RegexContext, and the fact that they
311 call 'nullFail' just like the example above.  The DoCon package also
312 does the same thing; it shows up in module Fraction.hs
313
314 Conclusion: when typechecking the methods in a C [a] instance, we want to
315 treat the 'a' as an *existential* type variable, in the sense described
316 by Note [Binding when looking up instances].  That is why isOverlappableTyVar
317 responds True to an InstSkol, which is the kind of skolem we use in
318 tcInstDecl2.
319
320
321 Note [Tricky type variable scoping]
322 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
323 In our example
324         class C a where
325            op1, op2 :: Ix b => a -> b -> b
326            op2 = <dm-rhs>
327
328         instance C a => C [a]
329            {-# INLINE [2] op1 #-}
330            op1 = <rhs>
331
332 note that 'a' and 'b' are *both* in scope in <dm-rhs>, but only 'a' is
333 in scope in <rhs>.  In particular, we must make sure that 'b' is in
334 scope when typechecking <dm-rhs>.  This is achieved by subFunTys,
335 which brings appropriate tyvars into scope. This happens for both
336 <dm-rhs> and for <rhs>, but that doesn't matter: the *renamer* will have
337 complained if 'b' is mentioned in <rhs>.
338
339
340
341 %************************************************************************
342 %*                                                                      *
343 \subsection{Extracting instance decls}
344 %*                                                                      *
345 %************************************************************************
346
347 Gather up the instance declarations from their various sources
348
349 \begin{code}
350 tcInstDecls1    -- Deal with both source-code and imported instance decls
351    :: [LTyClDecl Name]          -- For deriving stuff
352    -> [LInstDecl Name]          -- Source code instance decls
353    -> [LDerivDecl Name]         -- Source code stand-alone deriving decls
354    -> TcM (TcGblEnv,            -- The full inst env
355            [InstInfo Name],     -- Source-code instance decls to process;
356                                 -- contains all dfuns for this module
357            HsValBinds Name)     -- Supporting bindings for derived instances
358
359 tcInstDecls1 tycl_decls inst_decls deriv_decls
360   = checkNoErrs $
361     do {        -- Stop if addInstInfos etc discovers any errors
362                 -- (they recover, so that we get more than one error each
363                 -- round)
364
365                 -- (1) Do class and family instance declarations
366        ; idx_tycons        <- mapAndRecoverM (tcFamInstDecl TopLevel) $
367                               filter (isFamInstDecl . unLoc) tycl_decls 
368        ; local_info_tycons <- mapAndRecoverM tcLocalInstDecl1  inst_decls
369
370        ; let { (local_info,
371                 at_tycons_s)   = unzip local_info_tycons
372              ; at_idx_tycons   = concat at_tycons_s ++ idx_tycons
373              ; clas_decls      = filter (isClassDecl . unLoc) tycl_decls
374              ; implicit_things = concatMap implicitTyThings at_idx_tycons
375              ; aux_binds       = mkRecSelBinds at_idx_tycons
376              }
377
378                 -- (2) Add the tycons of indexed types and their implicit
379                 --     tythings to the global environment
380        ; tcExtendGlobalEnv (at_idx_tycons ++ implicit_things) $ do {
381
382
383                 -- Next, construct the instance environment so far, consisting
384                 -- of
385                 --   (a) local instance decls
386                 --   (b) local family instance decls
387        ; addInsts local_info         $
388          addFamInsts at_idx_tycons   $ do {
389
390                 -- (3) Compute instances from "deriving" clauses;
391                 -- This stuff computes a context for the derived instance
392                 -- decl, so it needs to know about all the instances possible
393                 -- NB: class instance declarations can contain derivings as
394                 --     part of associated data type declarations
395          failIfErrsM    -- If the addInsts stuff gave any errors, don't
396                         -- try the deriving stuff, because that may give
397                         -- more errors still
398        ; (deriv_inst_info, deriv_binds, deriv_dus, deriv_tys, deriv_ty_insts) 
399               <- tcDeriving tycl_decls inst_decls deriv_decls
400
401        -- Extend the global environment also with the generated datatypes for
402        -- the generic representation
403        ; gbl_env <- addFamInsts (map ATyCon deriv_ty_insts) $
404                       tcExtendGlobalEnv (map ATyCon (deriv_tys ++ deriv_ty_insts)) $
405                         addInsts deriv_inst_info getGblEnv
406        ; return ( addTcgDUs gbl_env deriv_dus,
407                   deriv_inst_info ++ local_info,
408                   aux_binds `plusHsValBinds` deriv_binds)
409     }}}
410
411 addInsts :: [InstInfo Name] -> TcM a -> TcM a
412 addInsts infos thing_inside
413   = tcExtendLocalInstEnv (map iSpec infos) thing_inside
414
415 addFamInsts :: [TyThing] -> TcM a -> TcM a
416 addFamInsts tycons thing_inside
417   = tcExtendLocalFamInstEnv (map mkLocalFamInstTyThing tycons) thing_inside
418   where
419     mkLocalFamInstTyThing (ATyCon tycon) = mkLocalFamInst tycon
420     mkLocalFamInstTyThing tything        = pprPanic "TcInstDcls.addFamInsts"
421                                                     (ppr tything)
422 \end{code}
423
424 \begin{code}
425 tcLocalInstDecl1 :: LInstDecl Name
426                  -> TcM (InstInfo Name, [TyThing])
427         -- A source-file instance declaration
428         -- Type-check all the stuff before the "where"
429         --
430         -- We check for respectable instance type, and context
431 tcLocalInstDecl1 (L loc (InstDecl poly_ty binds uprags ats))
432   = setSrcSpan loc                      $
433     addErrCtxt (instDeclCtxt1 poly_ty)  $
434
435     do  { is_boot <- tcIsHsBoot
436         ; checkTc (not is_boot || (isEmptyLHsBinds binds && null uprags))
437                   badBootDeclErr
438
439         ; (tyvars, theta, clas, inst_tys) <- tcHsInstHead poly_ty
440         ; checkValidInstance poly_ty tyvars theta clas inst_tys
441
442         -- Next, process any associated types.
443         ; idx_tycons <- recoverM (return []) $
444                      do { idx_tycons <- checkNoErrs $ 
445                                         mapAndRecoverM (tcFamInstDecl NotTopLevel) ats
446                         ; checkValidAndMissingATs clas (tyvars, inst_tys)
447                                                   (zip ats idx_tycons)
448                         ; return idx_tycons }
449
450         -- Finally, construct the Core representation of the instance.
451         -- (This no longer includes the associated types.)
452         ; dfun_name <- newDFunName clas inst_tys (getLoc poly_ty)
453                 -- Dfun location is that of instance *header*
454         ; overlap_flag <- getOverlapFlag
455         ; let (eq_theta,dict_theta) = partition isEqPred theta
456               theta'         = eq_theta ++ dict_theta
457               dfun           = mkDictFunId dfun_name tyvars theta' clas inst_tys
458               ispec          = mkLocalInstance dfun overlap_flag
459
460         ; return (InstInfo { iSpec  = ispec, iBinds = VanillaInst binds uprags False },
461                   idx_tycons)
462         }
463   where
464     -- We pass in the source form and the type checked form of the ATs.  We
465     -- really need the source form only to be able to produce more informative
466     -- error messages.
467     checkValidAndMissingATs :: Class
468                             -> ([TyVar], [TcType])     -- instance types
469                             -> [(LTyClDecl Name,       -- source form of AT
470                                  TyThing)]             -- Core form of AT
471                             -> TcM ()
472     checkValidAndMissingATs clas inst_tys ats
473       = do { -- Issue a warning for each class AT that is not defined in this
474              -- instance.
475            ; let class_ats   = map tyConName (classATs clas)
476                  defined_ats = listToNameSet . map (tcdName.unLoc.fst)  $ ats
477                  omitted     = filterOut (`elemNameSet` defined_ats) class_ats
478            ; warn <- doptM Opt_WarnMissingMethods
479            ; mapM_ (warnTc warn . omittedATWarn) omitted
480
481              -- Ensure that all AT indexes that correspond to class parameters
482              -- coincide with the types in the instance head.  All remaining
483              -- AT arguments must be variables.  Also raise an error for any
484              -- type instances that are not associated with this class.
485            ; mapM_ (checkIndexes clas inst_tys) ats
486            }
487
488     checkIndexes clas inst_tys (hsAT, ATyCon tycon)
489 -- !!!TODO: check that this does the Right Thing for indexed synonyms, too!
490       = checkIndexes' clas inst_tys hsAT
491                       (tyConTyVars tycon,
492                        snd . fromJust . tyConFamInst_maybe $ tycon)
493     checkIndexes _ _ _ = panic "checkIndexes"
494
495     checkIndexes' clas (instTvs, instTys) hsAT (atTvs, atTys)
496       = let atName = tcdName . unLoc $ hsAT
497         in
498         setSrcSpan (getLoc hsAT)       $
499         addErrCtxt (atInstCtxt atName) $
500         case find ((atName ==) . tyConName) (classATs clas) of
501           Nothing     -> addErrTc $ badATErr clas atName  -- not in this class
502           Just atycon ->
503                 -- The following is tricky!  We need to deal with three
504                 -- complications: (1) The AT possibly only uses a subset of
505                 -- the class parameters as indexes and those it uses may be in
506                 -- a different order; (2) the AT may have extra arguments,
507                 -- which must be type variables; and (3) variables in AT and
508                 -- instance head will be different `Name's even if their
509                 -- source lexemes are identical.
510                 --
511                 -- e.g.    class C a b c where 
512                 --           data D b a :: * -> *           -- NB (1) b a, omits c
513                 --         instance C [x] Bool Char where 
514                 --           data D Bool [x] v = MkD x [v]  -- NB (2) v
515                 --                -- NB (3) the x in 'instance C...' have differnt
516                 --                --        Names to x's in 'data D...'
517                 --
518                 -- Re (1), `poss' contains a permutation vector to extract the
519                 -- class parameters in the right order.
520                 --
521                 -- Re (2), we wrap the (permuted) class parameters in a Maybe
522                 -- type and use Nothing for any extra AT arguments.  (First
523                 -- equation of `checkIndex' below.)
524                 --
525                 -- Re (3), we replace any type variable in the AT parameters
526                 -- that has the same source lexeme as some variable in the
527                 -- instance types with the instance type variable sharing its
528                 -- source lexeme.
529                 --
530                 let poss :: [Int]
531                     -- For *associated* type families, gives the position
532                     -- of that 'TyVar' in the class argument list (0-indexed)
533                     -- e.g.  class C a b c where { type F c a :: *->* }
534                     --       Then we get Just [2,0]
535                     poss = catMaybes [ tv `elemIndex` classTyVars clas 
536                                      | tv <- tyConTyVars atycon]
537                        -- We will get Nothings for the "extra" type 
538                        -- variables in an associated data type
539                        -- e.g. class C a where { data D a :: *->* }
540                        -- here D gets arity 2 and has two tyvars
541
542                     relevantInstTys = map (instTys !!) poss
543                     instArgs        = map Just relevantInstTys ++
544                                       repeat Nothing  -- extra arguments
545                     renaming        = substSameTyVar atTvs instTvs
546                 in
547                 zipWithM_ checkIndex (substTys renaming atTys) instArgs
548
549     checkIndex ty Nothing
550       | isTyVarTy ty         = return ()
551       | otherwise            = addErrTc $ mustBeVarArgErr ty
552     checkIndex ty (Just instTy)
553       | ty `tcEqType` instTy = return ()
554       | otherwise            = addErrTc $ wrongATArgErr ty instTy
555
556     listToNameSet = addListToNameSet emptyNameSet
557
558     substSameTyVar []       _            = emptyTvSubst
559     substSameTyVar (tv:tvs) replacingTvs =
560       let replacement = case find (tv `sameLexeme`) replacingTvs of
561                         Nothing  -> mkTyVarTy tv
562                         Just rtv -> mkTyVarTy rtv
563           --
564           tv1 `sameLexeme` tv2 =
565             nameOccName (tyVarName tv1) == nameOccName (tyVarName tv2)
566       in
567       extendTvSubst (substSameTyVar tvs replacingTvs) tv replacement
568 \end{code}
569
570
571 %************************************************************************
572 %*                                                                      *
573       Type-checking instance declarations, pass 2
574 %*                                                                      *
575 %************************************************************************
576
577 \begin{code}
578 tcInstDecls2 :: [LTyClDecl Name] -> [InstInfo Name]
579              -> TcM (LHsBinds Id)
580 -- (a) From each class declaration,
581 --      generate any default-method bindings
582 -- (b) From each instance decl
583 --      generate the dfun binding
584
585 tcInstDecls2 tycl_decls inst_decls
586   = do  { -- (a) Default methods from class decls
587           let class_decls = filter (isClassDecl . unLoc) tycl_decls
588         ; dm_binds_s <- mapM tcClassDecl2 class_decls
589         ; let dm_binds = unionManyBags dm_binds_s
590                                     
591           -- (b) instance declarations
592         ; let dm_ids = collectHsBindsBinders dm_binds
593               -- Add the default method Ids (again)
594               -- See Note [Default methods and instances]
595         ; inst_binds_s <- tcExtendIdEnv dm_ids $
596                           mapM tcInstDecl2 inst_decls
597
598           -- Done
599         ; return (dm_binds `unionBags` unionManyBags inst_binds_s) }
600 \end{code}
601
602 See Note [Default methods and instances]
603 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
604 The default method Ids are already in the type environment (see Note
605 [Default method Ids and Template Haskell] in TcTyClsDcls), BUT they
606 don't have their InlinePragmas yet.  Usually that would not matter,
607 because the simplifier propagates information from binding site to
608 use.  But, unusually, when compiling instance decls we *copy* the
609 INLINE pragma from the default method to the method for that
610 particular operation (see Note [INLINE and default methods] below).
611
612 So right here in tcInstDecl2 we must re-extend the type envt with
613 the default method Ids replete with their INLINE pragmas.  Urk.
614
615 \begin{code}
616
617 tcInstDecl2 :: InstInfo Name -> TcM (LHsBinds Id)
618             -- Returns a binding for the dfun
619 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = ibinds })
620   = recoverM (return emptyLHsBinds)             $
621     setSrcSpan loc                              $
622     addErrCtxt (instDeclCtxt2 (idType dfun_id)) $ 
623     do {  -- Instantiate the instance decl with skolem constants
624        ; (inst_tyvars, dfun_theta, inst_head) <- tcSkolDFunType (idType dfun_id)
625        ; let (clas, inst_tys) = tcSplitDFunHead inst_head
626              (class_tyvars, sc_theta, _, op_items) = classBigSig clas
627              sc_theta' = substTheta (zipOpenTvSubst class_tyvars inst_tys) sc_theta
628              n_ty_args = length inst_tyvars
629              n_silent  = dfunNSilent dfun_id
630              (silent_theta, orig_theta) = splitAt n_silent dfun_theta
631
632        ; silent_ev_vars <- mapM newSilentGiven silent_theta
633        ; orig_ev_vars   <- newEvVars orig_theta
634        ; let dfun_ev_vars = silent_ev_vars ++ orig_ev_vars
635
636        ; (sc_dicts, sc_args)
637              <- mapAndUnzipM (tcSuperClass n_ty_args dfun_ev_vars) sc_theta'
638
639        -- Check that any superclasses gotten from a silent arguemnt
640        -- can be deduced from the originally-specified dfun arguments
641        ; ct_loc <- getCtLoc ScOrigin
642        ; _ <- checkConstraints skol_info inst_tyvars orig_ev_vars $
643               emitFlats $ listToBag $
644               [ mkEvVarX sc ct_loc | sc <- sc_dicts, isSilentEvVar sc ]
645
646        -- Deal with 'SPECIALISE instance' pragmas
647        -- See Note [SPECIALISE instance pragmas]
648        ; spec_info@(spec_inst_prags,_) <- tcSpecInstPrags dfun_id ibinds
649
650         -- Typecheck the methods
651        ; (meth_ids, meth_binds) 
652            <- tcExtendTyVarEnv inst_tyvars $
653                 -- The inst_tyvars scope over the 'where' part
654                 -- Those tyvars are inside the dfun_id's type, which is a bit
655                 -- bizarre, but OK so long as you realise it!
656               tcInstanceMethods dfun_id clas inst_tyvars dfun_ev_vars
657                                 inst_tys spec_info
658                                 op_items ibinds
659
660        -- Create the result bindings
661        ; self_dict <- newEvVar (ClassP clas inst_tys)
662        ; let class_tc      = classTyCon clas
663              [dict_constr] = tyConDataCons class_tc
664              dict_bind     = mkVarBind self_dict dict_rhs
665              dict_rhs      = foldl mk_app inst_constr $
666                              map HsVar sc_dicts ++ map (wrapId arg_wrapper) meth_ids
667              inst_constr   = L loc $ wrapId (mkWpTyApps inst_tys)
668                                             (dataConWrapId dict_constr)
669                      -- We don't produce a binding for the dict_constr; instead we
670                      -- rely on the simplifier to unfold this saturated application
671                      -- We do this rather than generate an HsCon directly, because
672                      -- it means that the special cases (e.g. dictionary with only one
673                      -- member) are dealt with by the common MkId.mkDataConWrapId 
674                      -- code rather than needing to be repeated here.
675
676              mk_app :: LHsExpr Id -> HsExpr Id -> LHsExpr Id
677              mk_app fun arg = L loc (HsApp fun (L loc arg))
678
679              arg_wrapper = mkWpEvVarApps dfun_ev_vars <.> mkWpTyApps (mkTyVarTys inst_tyvars)
680
681                 -- Do not inline the dfun; instead give it a magic DFunFunfolding
682                 -- See Note [ClassOp/DFun selection]
683                 -- See also note [Single-method classes]
684              dfun_id_w_fun
685                 | isNewTyCon class_tc
686                 = dfun_id `setInlinePragma` alwaysInlinePragma { inl_sat = Just 0 }
687                 | otherwise
688                 = dfun_id `setIdUnfolding`  mkDFunUnfolding dfun_ty (sc_args ++ meth_args)
689                           `setInlinePragma` dfunInlinePragma
690              meth_args = map (DFunPolyArg . Var) meth_ids
691
692              main_bind = AbsBinds { abs_tvs = inst_tyvars
693                                   , abs_ev_vars = dfun_ev_vars
694                                   , abs_exports = [(inst_tyvars, dfun_id_w_fun, self_dict,
695                                                     SpecPrags spec_inst_prags)]
696                                   , abs_ev_binds = emptyTcEvBinds
697                                   , abs_binds = unitBag dict_bind }
698
699        ; return (unitBag (L loc main_bind) `unionBags`
700                  listToBag meth_binds)
701        }
702  where
703    skol_info = InstSkol         -- See Note [Subtle interaction of recursion and overlap]
704    dfun_ty   = idType dfun_id
705    dfun_id   = instanceDFunId ispec
706    loc       = getSrcSpan dfun_id
707
708 ------------------------------
709 tcSuperClass :: Int -> [EvVar] -> PredType -> TcM (EvVar, DFunArg CoreExpr)
710 -- All superclasses should be either
711 --   (a) be one of the arguments to the dfun, of
712 --   (b) be a constant, soluble at top level
713 tcSuperClass n_ty_args ev_vars pred
714   | Just (ev, i) <- find n_ty_args ev_vars
715   = return (ev, DFunLamArg i)
716   | otherwise
717   = ASSERT2( isEmptyVarSet (tyVarsOfPred pred), ppr pred)       -- Constant!
718     do { sc_dict  <- emitWanted ScOrigin pred
719        ; return (sc_dict, DFunConstArg (Var sc_dict)) }
720   where
721     find _ [] = Nothing
722     find i (ev:evs) | pred `tcEqPred` evVarPred ev = Just (ev, i)
723                     | otherwise                    = find (i+1) evs
724
725 ------------------------------
726 tcSpecInstPrags :: DFunId -> InstBindings Name
727                 -> TcM ([Located TcSpecPrag], PragFun)
728 tcSpecInstPrags _ (NewTypeDerived {})
729   = return ([], \_ -> [])
730 tcSpecInstPrags dfun_id (VanillaInst binds uprags _)
731   = do { spec_inst_prags <- mapM (wrapLocM (tcSpecInst dfun_id)) $
732                             filter isSpecInstLSig uprags
733              -- The filter removes the pragmas for methods
734        ; return (spec_inst_prags, mkPragFun uprags binds) }
735 \end{code}
736
737 Note [Silent Superclass Arguments]
738 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
739 Consider the following (extreme) situation:
740         class C a => D a where ...
741         instance D [a] => D [a] where ...
742 Although this looks wrong (assume D [a] to prove D [a]), it is only a
743 more extreme case of what happens with recursive dictionaries.
744
745 To implement the dfun we must generate code for the superclass C [a],
746 which we can get by superclass selection from the supplied argument!
747 So we’d generate:
748        dfun :: forall a. D [a] -> D [a]
749        dfun = \d::D [a] -> MkD (scsel d) ..
750
751 However this means that if we later encounter a situation where
752 we have a [Wanted] dw::D [a] we could solve it thus:
753      dw := dfun dw
754 Although recursive, this binding would pass the TcSMonadisGoodRecEv
755 check because it appears as guarded.  But in reality, it will make a
756 bottom superclass. The trouble is that isGoodRecEv can't "see" the
757 superclass-selection inside dfun.
758
759 Our solution to this problem is to change the way â€˜dfuns’ are created
760 for instances, so that we pass as first arguments to the dfun some
761 ``silent superclass arguments’’, which are the immediate superclasses
762 of the dictionary we are trying to construct. In our example:
763        dfun :: forall a. (C [a], D [a] -> D [a]
764        dfun = \(dc::C [a]) (dd::D [a]) -> DOrd dc ...
765
766 This gives us:
767
768      -----------------------------------------------------------
769      DFun Superclass Invariant
770      ~~~~~~~~~~~~~~~~~~~~~~~~
771      In the body of a DFun, every superclass argument to the
772      returned dictionary is
773        either   * one of the arguments of the DFun,
774        or       * constant, bound at top level
775      -----------------------------------------------------------
776
777 This means that no superclass is hidden inside a dfun application, so
778 the counting argument in isGoodRecEv (more dfun calls than superclass
779 selections) works correctly.
780
781 The extra arguments required to satisfy the DFun Superclass Invariant
782 always come first, and are called the "silent" arguments.  DFun types
783 are built (only) by MkId.mkDictFunId, so that is where we decide
784 what silent arguments are to be added.
785
786 This net effect is that it is safe to treat a dfun application as
787 wrapping a dictionary constructor around its arguments (in particular,
788 a dfun never picks superclasses from the arguments under the dictionary
789 constructor).
790
791 In our example, if we had  [Wanted] dw :: D [a] we would get via the instance:
792     dw := dfun d1 d2
793     [Wanted] (d1 :: C [a])
794     [Wanted] (d2 :: D [a])
795     [Derived] (d :: D [a])
796     [Derived] (scd :: C [a])   scd  := scsel d
797     [Derived] (scd2 :: C [a])  scd2 := scsel d2
798
799 And now, though we *can* solve: 
800      d2 := dw
801 we will get an isGoodRecEv failure when we try to solve:
802     d1 := scsel d 
803  or
804     d1 := scsel d2 
805
806 Test case SCLoop tests this fix. 
807          
808 Note [SPECIALISE instance pragmas]
809 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
810 Consider
811
812    instance (Ix a, Ix b) => Ix (a,b) where
813      {-# SPECIALISE instance Ix (Int,Int) #-}
814      range (x,y) = ...
815
816 We do *not* want to make a specialised version of the dictionary
817 function.  Rather, we want specialised versions of each method.
818 Thus we should generate something like this:
819
820   $dfIx :: (Ix a, Ix x) => Ix (a,b)
821   {- DFUN [$crange, ...] -}
822   $dfIx da db = Ix ($crange da db) (...other methods...)
823
824   $dfIxPair :: (Ix a, Ix x) => Ix (a,b)
825   {- DFUN [$crangePair, ...] -}
826   $dfIxPair = Ix ($crangePair da db) (...other methods...)
827
828   $crange :: (Ix a, Ix b) -> ((a,b),(a,b)) -> [(a,b)]
829   {-# SPECIALISE $crange :: ((Int,Int),(Int,Int)) -> [(Int,Int)] #-}
830   $crange da db = <blah>
831
832   {-# RULE  range ($dfIx da db) = $crange da db #-}
833
834 Note that  
835
836   * The RULE is unaffected by the specialisation.  We don't want to
837     specialise $dfIx, because then it would need a specialised RULE
838     which is a pain.  The single RULE works fine at all specialisations.
839     See Note [How instance declarations are translated] above
840
841   * Instead, we want to specialise the *method*, $crange
842
843 In practice, rather than faking up a SPECIALISE pragama for each
844 method (which is painful, since we'd have to figure out its
845 specialised type), we call tcSpecPrag *as if* were going to specialise
846 $dfIx -- you can see that in the call to tcSpecInst.  That generates a
847 SpecPrag which, as it turns out, can be used unchanged for each method.
848 The "it turns out" bit is delicate, but it works fine!
849
850 \begin{code}
851 tcSpecInst :: Id -> Sig Name -> TcM TcSpecPrag
852 tcSpecInst dfun_id prag@(SpecInstSig hs_ty) 
853   = addErrCtxt (spec_ctxt prag) $
854     do  { let name = idName dfun_id
855         ; (tyvars, theta, clas, tys) <- tcHsInstHead hs_ty
856         ; let (_, spec_dfun_ty) = mkDictFunTy tyvars theta clas tys
857
858         ; co_fn <- tcSubType (SpecPragOrigin name) SpecInstCtxt
859                              (idType dfun_id) spec_dfun_ty
860         ; return (SpecPrag dfun_id co_fn defaultInlinePragma) }
861   where
862     spec_ctxt prag = hang (ptext (sLit "In the SPECIALISE pragma")) 2 (ppr prag)
863
864 tcSpecInst _  _ = panic "tcSpecInst"
865 \end{code}
866
867 %************************************************************************
868 %*                                                                      *
869       Type-checking an instance method
870 %*                                                                      *
871 %************************************************************************
872
873 tcInstanceMethod
874 - Make the method bindings, as a [(NonRec, HsBinds)], one per method
875 - Remembering to use fresh Name (the instance method Name) as the binder
876 - Bring the instance method Ids into scope, for the benefit of tcInstSig
877 - Use sig_fn mapping instance method Name -> instance tyvars
878 - Ditto prag_fn
879 - Use tcValBinds to do the checking
880
881 \begin{code}
882 tcInstanceMethods :: DFunId -> Class -> [TcTyVar]
883                   -> [EvVar]
884                   -> [TcType]
885                   -> ([Located TcSpecPrag], PragFun)
886                   -> [(Id, DefMeth)]
887                   -> InstBindings Name 
888                   -> TcM ([Id], [LHsBind Id])
889         -- The returned inst_meth_ids all have types starting
890         --      forall tvs. theta => ...
891 tcInstanceMethods dfun_id clas tyvars dfun_ev_vars inst_tys 
892                   (spec_inst_prags, prag_fn)
893                   op_items (VanillaInst binds _ standalone_deriv)
894   = mapAndUnzipM tc_item op_items
895   where
896     ----------------------
897     tc_item :: (Id, DefMeth) -> TcM (Id, LHsBind Id)
898     tc_item (sel_id, dm_info)
899       = case findMethodBind (idName sel_id) binds of
900             Just user_bind -> tc_body sel_id standalone_deriv user_bind
901             Nothing        -> tc_default sel_id dm_info
902
903     ----------------------
904     tc_body :: Id -> Bool -> LHsBind Name -> TcM (TcId, LHsBind Id)
905     tc_body sel_id generated_code rn_bind 
906       = add_meth_ctxt sel_id generated_code rn_bind $
907         do { (meth_id, local_meth_id) <- mkMethIds clas tyvars dfun_ev_vars 
908                                                    inst_tys sel_id
909            ; let prags = prag_fn (idName sel_id)
910            ; meth_id1 <- addInlinePrags meth_id prags
911            ; spec_prags <- tcSpecPrags meth_id1 prags
912            ; bind <- tcInstanceMethodBody InstSkol
913                           tyvars dfun_ev_vars
914                           meth_id1 local_meth_id meth_sig_fn 
915                           (mk_meth_spec_prags meth_id1 spec_prags)
916                           rn_bind 
917            ; return (meth_id1, bind) }
918
919     ----------------------
920     tc_default :: Id -> DefMeth -> TcM (TcId, LHsBind Id)
921
922     tc_default sel_id (GenDefMeth dm_name)
923       = do { meth_bind <- mkGenericDefMethBind clas inst_tys sel_id dm_name
924            ; tc_body sel_id False {- Not generated code? -} meth_bind }
925 {-
926     tc_default sel_id GenDefMeth    -- Derivable type classes stuff
927       = do { meth_bind <- mkGenericDefMethBind clas inst_tys sel_id
928            ; tc_body sel_id False {- Not generated code? -} meth_bind }
929 -}
930     tc_default sel_id NoDefMeth     -- No default method at all
931       = do { warnMissingMethod sel_id
932            ; (meth_id, _) <- mkMethIds clas tyvars dfun_ev_vars 
933                                          inst_tys sel_id
934            ; return (meth_id, mkVarBind meth_id $ 
935                               mkLHsWrap lam_wrapper error_rhs) }
936       where
937         error_rhs    = L loc $ HsApp error_fun error_msg
938         error_fun    = L loc $ wrapId (WpTyApp meth_tau) nO_METHOD_BINDING_ERROR_ID
939         error_msg    = L loc (HsLit (HsStringPrim (mkFastString error_string)))
940         meth_tau     = funResultTy (applyTys (idType sel_id) inst_tys)
941         error_string = showSDoc (hcat [ppr loc, text "|", ppr sel_id ])
942         lam_wrapper  = mkWpTyLams tyvars <.> mkWpLams dfun_ev_vars
943
944     tc_default sel_id (DefMeth dm_name) -- A polymorphic default method
945       = do {   -- Build the typechecked version directly, 
946                  -- without calling typecheck_method; 
947                  -- see Note [Default methods in instances]
948                  -- Generate   /\as.\ds. let self = df as ds
949                  --                      in $dm inst_tys self
950                  -- The 'let' is necessary only because HsSyn doesn't allow
951                  -- you to apply a function to a dictionary *expression*.
952
953            ; self_dict <- newEvVar (ClassP clas inst_tys)
954            ; let self_ev_bind = EvBind self_dict $
955                                 EvDFunApp dfun_id (mkTyVarTys tyvars) dfun_ev_vars
956
957            ; (meth_id, local_meth_id) <- mkMethIds clas tyvars dfun_ev_vars 
958                                                    inst_tys sel_id
959            ; dm_id <- tcLookupId dm_name
960            ; let dm_inline_prag = idInlinePragma dm_id
961                  rhs = HsWrap (mkWpEvVarApps [self_dict] <.> mkWpTyApps inst_tys) $
962                          HsVar dm_id 
963
964                  meth_bind = L loc $ VarBind { var_id = local_meth_id
965                                              , var_rhs = L loc rhs 
966                                              , var_inline = False }
967                  meth_id1 = meth_id `setInlinePragma` dm_inline_prag
968                             -- Copy the inline pragma (if any) from the default
969                             -- method to this version. Note [INLINE and default methods]
970                             
971                  bind = AbsBinds { abs_tvs = tyvars, abs_ev_vars =  dfun_ev_vars
972                                  , abs_exports = [( tyvars, meth_id1, local_meth_id
973                                                   , mk_meth_spec_prags meth_id1 [])]
974                                  , abs_ev_binds = EvBinds (unitBag self_ev_bind)
975                                  , abs_binds    = unitBag meth_bind }
976              -- Default methods in an instance declaration can't have their own 
977              -- INLINE or SPECIALISE pragmas. It'd be possible to allow them, but
978              -- currently they are rejected with 
979              --           "INLINE pragma lacks an accompanying binding"
980
981            ; return (meth_id1, L loc bind) } 
982
983     ----------------------
984     mk_meth_spec_prags :: Id -> [LTcSpecPrag] -> TcSpecPrags
985         -- Adapt the SPECIALISE pragmas to work for this method Id
986         -- There are two sources: 
987         --   * spec_inst_prags: {-# SPECIALISE instance :: <blah> #-}
988         --     These ones have the dfun inside, but [perhaps surprisingly] 
989         --     the correct wrapper
990         --   * spec_prags_for_me: {-# SPECIALISE op :: <blah> #-}
991     mk_meth_spec_prags meth_id spec_prags_for_me
992       = SpecPrags (spec_prags_for_me ++ 
993                    [ L loc (SpecPrag meth_id wrap inl)
994                    | L loc (SpecPrag _ wrap inl) <- spec_inst_prags])
995    
996     loc = getSrcSpan dfun_id
997     meth_sig_fn _ = Just ([],loc)       -- The 'Just' says "yes, there's a type sig"
998         -- But there are no scoped type variables from local_method_id
999         -- Only the ones from the instance decl itself, which are already
1000         -- in scope.  Example:
1001         --      class C a where { op :: forall b. Eq b => ... }
1002         --      instance C [c] where { op = <rhs> }
1003         -- In <rhs>, 'c' is scope but 'b' is not!
1004
1005         -- For instance decls that come from standalone deriving clauses
1006         -- we want to print out the full source code if there's an error
1007         -- because otherwise the user won't see the code at all
1008     add_meth_ctxt sel_id generated_code rn_bind thing 
1009       | generated_code = addLandmarkErrCtxt (derivBindCtxt sel_id clas inst_tys rn_bind) thing
1010       | otherwise      = thing
1011
1012
1013 tcInstanceMethods dfun_id clas tyvars dfun_ev_vars inst_tys 
1014                   _ op_items (NewTypeDerived coi _)
1015
1016 -- Running example:
1017 --   class Show b => Foo a b where
1018 --     op :: a -> b -> b
1019 --   newtype N a = MkN (Tree [a]) 
1020 --   deriving instance (Show p, Foo Int p) => Foo Int (N p)
1021 --               -- NB: standalone deriving clause means
1022 --               --     that the contex is user-specified
1023 -- Hence op :: forall a b. Foo a b => a -> b -> b
1024 --
1025 -- We're going to make an instance like
1026 --   instance (Show p, Foo Int p) => Foo Int (N p)
1027 --      op = $copT
1028 --
1029 --   $copT :: forall p. (Show p, Foo Int p) => Int -> N p -> N p
1030 --   $copT p (d1:Show p) (d2:Foo Int p) 
1031 --     = op Int (Tree [p]) rep_d |> op_co
1032 --     where 
1033 --       rep_d :: Foo Int (Tree [p]) = ...d1...d2...
1034 --       op_co :: (Int -> Tree [p] -> Tree [p]) ~ (Int -> T p -> T p)
1035 -- We get op_co by substituting [Int/a] and [co/b] in type for op
1036 -- where co : [p] ~ T p
1037 --
1038 -- Notice that the dictionary bindings "..d1..d2.." must be generated
1039 -- by the constraint solver, since the <context> may be
1040 -- user-specified.
1041
1042   = do { rep_d_stuff <- checkConstraints InstSkol tyvars dfun_ev_vars $
1043                         emitWanted ScOrigin rep_pred
1044                          
1045        ; mapAndUnzipM (tc_item rep_d_stuff) op_items }
1046   where
1047      loc = getSrcSpan dfun_id
1048
1049      inst_tvs = fst (tcSplitForAllTys (idType dfun_id))
1050      Just (init_inst_tys, _) = snocView inst_tys
1051      rep_ty   = fst (coercionKind co)  -- [p]
1052      rep_pred = mkClassPred clas (init_inst_tys ++ [rep_ty])
1053
1054      -- co : [p] ~ T p
1055      co = substTyWith inst_tvs (mkTyVarTys tyvars) $
1056           case coi of { IdCo ty -> ty ;
1057                         ACo co  -> mkSymCoercion co }
1058
1059      ----------------
1060      tc_item :: (TcEvBinds, EvVar) -> (Id, DefMeth) -> TcM (TcId, LHsBind TcId)
1061      tc_item (rep_ev_binds, rep_d) (sel_id, _)
1062        = do { (meth_id, local_meth_id) <- mkMethIds clas tyvars dfun_ev_vars 
1063                                                     inst_tys sel_id
1064
1065             ; let meth_rhs  = wrapId (mk_op_wrapper sel_id rep_d) sel_id
1066                   meth_bind = VarBind { var_id = local_meth_id
1067                                       , var_rhs = L loc meth_rhs
1068                                       , var_inline = False }
1069
1070                   bind = AbsBinds { abs_tvs = tyvars, abs_ev_vars = dfun_ev_vars
1071                                    , abs_exports = [(tyvars, meth_id, 
1072                                                      local_meth_id, noSpecPrags)]
1073                                    , abs_ev_binds = rep_ev_binds
1074                                    , abs_binds = unitBag $ L loc meth_bind }
1075
1076             ; return (meth_id, L loc bind) }
1077
1078      ----------------
1079      mk_op_wrapper :: Id -> EvVar -> HsWrapper
1080      mk_op_wrapper sel_id rep_d 
1081        = WpCast (substTyWith sel_tvs (init_inst_tys ++ [co]) local_meth_ty)
1082          <.> WpEvApp (EvId rep_d)
1083          <.> mkWpTyApps (init_inst_tys ++ [rep_ty]) 
1084        where
1085          (sel_tvs, sel_rho) = tcSplitForAllTys (idType sel_id)
1086          (_, local_meth_ty) = tcSplitPredFunTy_maybe sel_rho
1087                               `orElse` pprPanic "tcInstanceMethods" (ppr sel_id)
1088
1089 ----------------------
1090 mkMethIds :: Class -> [TcTyVar] -> [EvVar] -> [TcType] -> Id -> TcM (TcId, TcId)
1091 mkMethIds clas tyvars dfun_ev_vars inst_tys sel_id
1092   = do  { uniq <- newUnique
1093         ; let meth_name = mkDerivedInternalName mkClassOpAuxOcc uniq sel_name
1094         ; local_meth_name <- newLocalName sel_name
1095                   -- Base the local_meth_name on the selector name, becuase
1096                   -- type errors from tcInstanceMethodBody come from here
1097
1098         ; let meth_id       = mkLocalId meth_name meth_ty
1099               local_meth_id = mkLocalId local_meth_name local_meth_ty
1100         ; return (meth_id, local_meth_id) }
1101   where
1102     local_meth_ty = instantiateMethod clas sel_id inst_tys
1103     meth_ty = mkForAllTys tyvars $ mkPiTypes dfun_ev_vars local_meth_ty
1104     sel_name = idName sel_id
1105
1106 ----------------------
1107 wrapId :: HsWrapper -> id -> HsExpr id
1108 wrapId wrapper id = mkHsWrap wrapper (HsVar id)
1109
1110 derivBindCtxt :: Id -> Class -> [Type ] -> LHsBind Name -> SDoc
1111 derivBindCtxt sel_id clas tys _bind
1112    = vcat [ ptext (sLit "When typechecking the code for ") <+> quotes (ppr sel_id)
1113           , nest 2 (ptext (sLit "in a standalone derived instance for")
1114                     <+> quotes (pprClassPred clas tys) <> colon)
1115           , nest 2 $ ptext (sLit "To see the code I am typechecking, use -ddump-deriv") ]
1116
1117 -- Too voluminous
1118 --        , nest 2 $ pprSetDepth AllTheWay $ ppr bind ]
1119
1120 warnMissingMethod :: Id -> TcM ()
1121 warnMissingMethod sel_id
1122   = do { warn <- doptM Opt_WarnMissingMethods           
1123        ; warnTc (warn  -- Warn only if -fwarn-missing-methods
1124                  && not (startsWithUnderscore (getOccName sel_id)))
1125                                         -- Don't warn about _foo methods
1126                 (ptext (sLit "No explicit method nor default method for")
1127                  <+> quotes (ppr sel_id)) }
1128 \end{code}
1129
1130 Note [Export helper functions]
1131 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1132 We arrange to export the "helper functions" of an instance declaration,
1133 so that they are not subject to preInlineUnconditionally, even if their
1134 RHS is trivial.  Reason: they are mentioned in the DFunUnfolding of
1135 the dict fun as Ids, not as CoreExprs, so we can't substitute a 
1136 non-variable for them.
1137
1138 We could change this by making DFunUnfoldings have CoreExprs, but it
1139 seems a bit simpler this way.
1140
1141 Note [Default methods in instances]
1142 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1143 Consider this
1144
1145    class Baz v x where
1146       foo :: x -> x
1147       foo y = <blah>
1148
1149    instance Baz Int Int
1150
1151 From the class decl we get
1152
1153    $dmfoo :: forall v x. Baz v x => x -> x
1154    $dmfoo y = <blah>
1155
1156 Notice that the type is ambiguous.  That's fine, though. The instance
1157 decl generates
1158
1159    $dBazIntInt = MkBaz fooIntInt
1160    fooIntInt = $dmfoo Int Int $dBazIntInt
1161
1162 BUT this does mean we must generate the dictionary translation of
1163 fooIntInt directly, rather than generating source-code and
1164 type-checking it.  That was the bug in Trac #1061. In any case it's
1165 less work to generate the translated version!
1166
1167 Note [INLINE and default methods]
1168 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1169 Default methods need special case.  They are supposed to behave rather like
1170 macros.  For exmample
1171
1172   class Foo a where
1173     op1, op2 :: Bool -> a -> a
1174
1175     {-# INLINE op1 #-}
1176     op1 b x = op2 (not b) x
1177
1178   instance Foo Int where
1179     -- op1 via default method
1180     op2 b x = <blah>
1181    
1182 The instance declaration should behave
1183
1184    just as if 'op1' had been defined with the
1185    code, and INLINE pragma, from its original
1186    definition. 
1187
1188 That is, just as if you'd written
1189
1190   instance Foo Int where
1191     op2 b x = <blah>
1192
1193     {-# INLINE op1 #-}
1194     op1 b x = op2 (not b) x
1195
1196 So for the above example we generate:
1197
1198
1199   {-# INLINE $dmop1 #-}
1200   -- $dmop1 has an InlineCompulsory unfolding
1201   $dmop1 d b x = op2 d (not b) x
1202
1203   $fFooInt = MkD $cop1 $cop2
1204
1205   {-# INLINE $cop1 #-}
1206   $cop1 = $dmop1 $fFooInt
1207
1208   $cop2 = <blah>
1209
1210 Note carefullly:
1211
1212 * We *copy* any INLINE pragma from the default method $dmop1 to the
1213   instance $cop1.  Otherwise we'll just inline the former in the
1214   latter and stop, which isn't what the user expected
1215
1216 * Regardless of its pragma, we give the default method an 
1217   unfolding with an InlineCompulsory source. That means
1218   that it'll be inlined at every use site, notably in
1219   each instance declaration, such as $cop1.  This inlining
1220   must happen even though 
1221     a) $dmop1 is not saturated in $cop1
1222     b) $cop1 itself has an INLINE pragma
1223
1224   It's vital that $dmop1 *is* inlined in this way, to allow the mutual
1225   recursion between $fooInt and $cop1 to be broken
1226
1227 * To communicate the need for an InlineCompulsory to the desugarer
1228   (which makes the Unfoldings), we use the IsDefaultMethod constructor
1229   in TcSpecPrags.
1230
1231
1232 %************************************************************************
1233 %*                                                                      *
1234 \subsection{Error messages}
1235 %*                                                                      *
1236 %************************************************************************
1237
1238 \begin{code}
1239 instDeclCtxt1 :: LHsType Name -> SDoc
1240 instDeclCtxt1 hs_inst_ty
1241   = inst_decl_ctxt (case unLoc hs_inst_ty of
1242                         HsForAllTy _ _ _ (L _ (HsPredTy pred)) -> ppr pred
1243                         HsPredTy pred                    -> ppr pred
1244                         _                                -> ppr hs_inst_ty)     -- Don't expect this
1245 instDeclCtxt2 :: Type -> SDoc
1246 instDeclCtxt2 dfun_ty
1247   = inst_decl_ctxt (ppr (mkClassPred cls tys))
1248   where
1249     (_,_,cls,tys) = tcSplitDFunTy dfun_ty
1250
1251 inst_decl_ctxt :: SDoc -> SDoc
1252 inst_decl_ctxt doc = ptext (sLit "In the instance declaration for") <+> quotes doc
1253
1254 atInstCtxt :: Name -> SDoc
1255 atInstCtxt name = ptext (sLit "In the associated type instance for") <+>
1256                   quotes (ppr name)
1257
1258 mustBeVarArgErr :: Type -> SDoc
1259 mustBeVarArgErr ty =
1260   sep [ ptext (sLit "Arguments that do not correspond to a class parameter") <+>
1261         ptext (sLit "must be variables")
1262       , ptext (sLit "Instead of a variable, found") <+> ppr ty
1263       ]
1264
1265 wrongATArgErr :: Type -> Type -> SDoc
1266 wrongATArgErr ty instTy =
1267   sep [ ptext (sLit "Type indexes must match class instance head")
1268       , ptext (sLit "Found") <+> quotes (ppr ty)
1269         <+> ptext (sLit "but expected") <+> quotes (ppr instTy)
1270       ]
1271 \end{code}