The Big INLINE Patch: totally reorganise way that INLINE pragmas work
[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 TcRnMonad
16 import TcMType
17 import TcType
18 import Inst
19 import InstEnv
20 import FamInst
21 import FamInstEnv
22 import TcDeriv
23 import TcEnv
24 import RnEnv    ( lookupGlobalOccRn )
25 import RnSource ( addTcgDUs )
26 import TcHsType
27 import TcUnify
28 import TcSimplify
29 import Type
30 import Coercion
31 import TyCon
32 import DataCon
33 import Class
34 import Var
35 import CoreUnfold ( mkDFunUnfolding )
36 import PrelNames  ( inlineIdName )
37 import Id
38 import MkId
39 import Name
40 import NameSet
41 import DynFlags
42 import SrcLoc
43 import Util
44 import Outputable
45 import Bag
46 import BasicTypes
47 import HscTypes
48 import FastString
49
50 import Data.Maybe
51 import Control.Monad
52 import Data.List
53
54 #include "HsVersions.h"
55 \end{code}
56
57 Typechecking instance declarations is done in two passes. The first
58 pass, made by @tcInstDecls1@, collects information to be used in the
59 second pass.
60
61 This pre-processed info includes the as-yet-unprocessed bindings
62 inside the instance declaration.  These are type-checked in the second
63 pass, when the class-instance envs and GVE contain all the info from
64 all the instance and value decls.  Indeed that's the reason we need
65 two passes over the instance decls.
66
67
68 Note [How instance declarations are translated]
69 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70 Here is how we translation instance declarations into Core
71
72 Running example:
73         class C a where
74            op1, op2 :: Ix b => a -> b -> b
75            op2 = <dm-rhs>
76
77         instance C a => C [a]
78            {-# INLINE [2] op1 #-}
79            op1 = <rhs>
80 ===>
81         -- Method selectors
82         op1,op2 :: forall a. C a => forall b. Ix b => a -> b -> b
83         op1 = ...
84         op2 = ...
85
86         -- Default methods get the 'self' dictionary as argument
87         -- so they can call other methods at the same type
88         -- Default methods get the same type as their method selector
89         $dmop2 :: forall a. C a => forall b. Ix b => a -> b -> b
90         $dmop2 = /\a. \(d:C a). /\b. \(d2: Ix b). <dm-rhs>
91                -- NB: type variables 'a' and 'b' are *both* in scope in <dm-rhs>
92                -- Note [Tricky type variable scoping]
93
94         -- A top-level definition for each instance method
95         -- Here op1_i, op2_i are the "instance method Ids"
96         -- The INLINE pragma comes from the user pragma
97         {-# INLINE [2] op1_i #-}  -- From the instance decl bindings
98         op1_i, op2_i :: forall a. C a => forall b. Ix b => [a] -> b -> b
99         op1_i = /\a. \(d:C a). 
100                let this :: C [a]
101                    this = df_i a d
102                      -- Note [Subtle interaction of recursion and overlap]
103
104                    local_op1 :: forall b. Ix b => [a] -> b -> b
105                    local_op1 = <rhs>
106                      -- Source code; run the type checker on this
107                      -- NB: Type variable 'a' (but not 'b') is in scope in <rhs>
108                      -- Note [Tricky type variable scoping]
109
110                in local_op1 a d
111
112         op2_i = /\a \d:C a. $dmop2 [a] (df_i a d) 
113
114         -- The dictionary function itself
115         {-# NOINLINE CONLIKE df_i #-}   -- Never inline dictionary functions
116         df_i :: forall a. C a -> C [a]
117         df_i = /\a. \d:C a. MkC (op1_i a d) (op2_i a d)
118                 -- But see Note [Default methods in instances]
119                 -- We can't apply the type checker to the default-method call
120
121         -- Use a RULE to short-circuit applications of the class ops
122         {-# RULE "op1@C[a]" forall a, d:C a. 
123                             op1 [a] (df_i d) = op1_i a d #-}
124
125 * The dictionary function itself is inlined as vigorously as we
126   possibly can, so that we expose that dictionary constructor to
127   selectors as much as poss.  That is why the op_i stuff is in 
128   *separate* bindings, so that the df_i binding is small enough
129   to inline.  See Note [Inline dfuns unconditionally].
130
131 * Note that df_i may be mutually recursive with both op1_i and op2_i.
132   It's crucial that df_i is not chosen as the loop breaker, even 
133   though op1_i has a (user-specified) INLINE pragma.
134   Not even once!  Else op1_i, op2_i may be inlined into df_i.
135
136 * Instead the idea is to inline df_i into op1_i, which may then select
137   methods from the MkC record, and thereby break the recursion with
138   df_i, leaving a *self*-recurisve op1_i.  (If op1_i doesn't call op at
139   the same type, it won't mention df_i, so there won't be recursion in
140   the first place.)  
141
142 * If op1_i is marked INLINE by the user there's a danger that we won't
143   inline df_i in it, and that in turn means that (since it'll be a
144   loop-breaker because df_i isn't), op1_i will ironically never be 
145   inlined.  We need to fix this somehow -- perhaps allowing inlining
146   of INLINE functions inside other INLINE functions.
147
148 Note [Subtle interaction of recursion and overlap]
149 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
150 Consider this
151   class C a where { op1,op2 :: a -> a }
152   instance C a => C [a] where
153     op1 x = op2 x ++ op2 x
154     op2 x = ...
155   intance C [Int] where
156     ...
157
158 When type-checking the C [a] instance, we need a C [a] dictionary (for
159 the call of op2).  If we look up in the instance environment, we find
160 an overlap.  And in *general* the right thing is to complain (see Note
161 [Overlapping instances] in InstEnv).  But in *this* case it's wrong to
162 complain, because we just want to delegate to the op2 of this same
163 instance.  
164
165 Why is this justified?  Because we generate a (C [a]) constraint in 
166 a context in which 'a' cannot be instantiated to anything that matches
167 other overlapping instances, or else we would not be excecuting this
168 version of op1 in the first place.
169
170 It might even be a bit disguised:
171
172   nullFail :: C [a] => [a] -> [a]
173   nullFail x = op2 x ++ op2 x
174
175   instance C a => C [a] where
176     op1 x = nullFail x
177
178 Precisely this is used in package 'regex-base', module Context.hs.
179 See the overlapping instances for RegexContext, and the fact that they
180 call 'nullFail' just like the example above.  The DoCon package also
181 does the same thing; it shows up in module Fraction.hs
182
183 Conclusion: when typechecking the methods in a C [a] instance, we want
184 to have C [a] available.  That is why we have the strange local
185 definition for 'this' in the definition of op1_i in the example above.
186 We can typecheck the defintion of local_op1, and when doing tcSimplifyCheck
187 we supply 'this' as a given dictionary.  Only needed, though, if there
188 are some type variables involved; otherwise there can be no overlap and
189 none of this arises.
190
191 Note [Tricky type variable scoping]
192 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
193 In our example
194         class C a where
195            op1, op2 :: Ix b => a -> b -> b
196            op2 = <dm-rhs>
197
198         instance C a => C [a]
199            {-# INLINE [2] op1 #-}
200            op1 = <rhs>
201
202 note that 'a' and 'b' are *both* in scope in <dm-rhs>, but only 'a' is
203 in scope in <rhs>.  In particular, we must make sure that 'b' is in
204 scope when typechecking <dm-rhs>.  This is achieved by subFunTys,
205 which brings appropriate tyvars into scope. This happens for both
206 <dm-rhs> and for <rhs>, but that doesn't matter: the *renamer* will have
207 complained if 'b' is mentioned in <rhs>.
208
209 Note [Inline dfuns unconditionally]
210 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
211 The code above unconditionally inlines dict funs.  Here's why.
212 Consider this program:
213
214     test :: Int -> Int -> Bool
215     test x y = (x,y) == (y,x) || test y x
216     -- Recursive to avoid making it inline.
217
218 This needs the (Eq (Int,Int)) instance.  If we inline that dfun
219 the code we end up with is good:
220
221     Test.$wtest =
222         \r -> case ==# [ww ww1] of wild {
223                 PrelBase.False -> Test.$wtest ww1 ww;
224                 PrelBase.True ->
225                   case ==# [ww1 ww] of wild1 {
226                     PrelBase.False -> Test.$wtest ww1 ww;
227                     PrelBase.True -> PrelBase.True [];
228                   };
229             };
230     Test.test = \r [w w1]
231             case w of w2 {
232               PrelBase.I# ww ->
233                   case w1 of w3 { PrelBase.I# ww1 -> Test.$wtest ww ww1; };
234             };
235
236 If we don't inline the dfun, the code is not nearly as good:
237
238     (==) = case PrelTup.$fEq(,) PrelBase.$fEqInt PrelBase.$fEqInt of tpl {
239               PrelBase.:DEq tpl1 tpl2 -> tpl2;
240             };
241
242     Test.$wtest =
243         \r [ww ww1]
244             let { y = PrelBase.I#! [ww1]; } in
245             let { x = PrelBase.I#! [ww]; } in
246             let { sat_slx = PrelTup.(,)! [y x]; } in
247             let { sat_sly = PrelTup.(,)! [x y];
248             } in
249               case == sat_sly sat_slx of wild {
250                 PrelBase.False -> Test.$wtest ww1 ww;
251                 PrelBase.True -> PrelBase.True [];
252               };
253
254     Test.test =
255         \r [w w1]
256             case w of w2 {
257               PrelBase.I# ww ->
258                   case w1 of w3 { PrelBase.I# ww1 -> Test.$wtest ww ww1; };
259             };
260
261 Why didn't GHC inline $fEq in those days?  Because it looked big:
262
263     PrelTup.zdfEqZ1T{-rcX-}
264         = \ @ a{-reT-} :: * @ b{-reS-} :: *
265             zddEq{-rf6-} _Ks :: {PrelBase.Eq{-23-} a{-reT-}}
266             zddEq1{-rf7-} _Ks :: {PrelBase.Eq{-23-} b{-reS-}} ->
267             let {
268               zeze{-rf0-} _Kl :: (b{-reS-} -> b{-reS-} -> PrelBase.Bool{-3c-})
269               zeze{-rf0-} = PrelBase.zeze{-01L-}@ b{-reS-} zddEq1{-rf7-} } in
270             let {
271               zeze1{-rf3-} _Kl :: (a{-reT-} -> a{-reT-} -> PrelBase.Bool{-3c-})
272               zeze1{-rf3-} = PrelBase.zeze{-01L-} @ a{-reT-} zddEq{-rf6-} } in
273             let {
274               zeze2{-reN-} :: ((a{-reT-}, b{-reS-}) -> (a{-reT-}, b{-reS-})-> PrelBase.Bool{-3c-})
275               zeze2{-reN-} = \ ds{-rf5-} _Ks :: (a{-reT-}, b{-reS-})
276                                ds1{-rf4-} _Ks :: (a{-reT-}, b{-reS-}) ->
277                              case ds{-rf5-}
278                              of wild{-reW-} _Kd { (a1{-rf2-} _Ks, a2{-reZ-} _Ks) ->
279                              case ds1{-rf4-}
280                              of wild1{-reX-} _Kd { (b1{-rf1-} _Ks, b2{-reY-} _Ks) ->
281                              PrelBase.zaza{-r4e-}
282                                (zeze1{-rf3-} a1{-rf2-} b1{-rf1-})
283                                (zeze{-rf0-} a2{-reZ-} b2{-reY-})
284                              }
285                              } } in
286             let {
287               a1{-reR-} :: ((a{-reT-}, b{-reS-})-> (a{-reT-}, b{-reS-})-> PrelBase.Bool{-3c-})
288               a1{-reR-} = \ a2{-reV-} _Ks :: (a{-reT-}, b{-reS-})
289                             b1{-reU-} _Ks :: (a{-reT-}, b{-reS-}) ->
290                           PrelBase.not{-r6I-} (zeze2{-reN-} a2{-reV-} b1{-reU-})
291             } in
292               PrelBase.zdwZCDEq{-r8J-} @ (a{-reT-}, b{-reS-}) a1{-reR-} zeze2{-reN-})
293
294 and it's not as bad as it seems, because it's further dramatically
295 simplified: only zeze2 is extracted and its body is simplified.
296
297
298 %************************************************************************
299 %*                                                                      *
300 \subsection{Extracting instance decls}
301 %*                                                                      *
302 %************************************************************************
303
304 Gather up the instance declarations from their various sources
305
306 \begin{code}
307 tcInstDecls1    -- Deal with both source-code and imported instance decls
308    :: [LTyClDecl Name]          -- For deriving stuff
309    -> [LInstDecl Name]          -- Source code instance decls
310    -> [LDerivDecl Name]         -- Source code stand-alone deriving decls
311    -> TcM (TcGblEnv,            -- The full inst env
312            [InstInfo Name],     -- Source-code instance decls to process;
313                                 -- contains all dfuns for this module
314            HsValBinds Name)     -- Supporting bindings for derived instances
315
316 tcInstDecls1 tycl_decls inst_decls deriv_decls
317   = checkNoErrs $
318     do {        -- Stop if addInstInfos etc discovers any errors
319                 -- (they recover, so that we get more than one error each
320                 -- round)
321
322                 -- (1) Do class and family instance declarations
323        ; let { idxty_decls = filter (isFamInstDecl . unLoc) tycl_decls }
324        ; local_info_tycons <- mapAndRecoverM tcLocalInstDecl1  inst_decls
325        ; idx_tycons        <- mapAndRecoverM tcIdxTyInstDeclTL idxty_decls
326
327        ; let { (local_info,
328                 at_tycons_s)   = unzip local_info_tycons
329              ; at_idx_tycons   = concat at_tycons_s ++ idx_tycons
330              ; clas_decls      = filter (isClassDecl.unLoc) tycl_decls
331              ; implicit_things = concatMap implicitTyThings at_idx_tycons
332              ; aux_binds       = mkAuxBinds at_idx_tycons
333              }
334
335                 -- (2) Add the tycons of indexed types and their implicit
336                 --     tythings to the global environment
337        ; tcExtendGlobalEnv (at_idx_tycons ++ implicit_things) $ do {
338
339                 -- (3) Instances from generic class declarations
340        ; generic_inst_info <- getGenericInstances clas_decls
341
342                 -- Next, construct the instance environment so far, consisting
343                 -- of
344                 --   a) local instance decls
345                 --   b) generic instances
346                 --   c) local family instance decls
347        ; addInsts local_info         $
348          addInsts generic_inst_info  $
349          addFamInsts at_idx_tycons   $ do {
350
351                 -- (4) Compute instances from "deriving" clauses;
352                 -- This stuff computes a context for the derived instance
353                 -- decl, so it needs to know about all the instances possible
354                 -- NB: class instance declarations can contain derivings as
355                 --     part of associated data type declarations
356          failIfErrsM            -- If the addInsts stuff gave any errors, don't
357                                 -- try the deriving stuff, becuase that may give
358                                 -- more errors still
359        ; (deriv_inst_info, deriv_binds, deriv_dus) 
360               <- tcDeriving tycl_decls inst_decls deriv_decls
361        ; gbl_env <- addInsts deriv_inst_info getGblEnv
362        ; return ( addTcgDUs gbl_env deriv_dus,
363                   generic_inst_info ++ deriv_inst_info ++ local_info,
364                   aux_binds `plusHsValBinds` deriv_binds)
365     }}}
366   where
367     -- Make sure that toplevel type instance are not for associated types.
368     -- !!!TODO: Need to perform this check for the TyThing of type functions,
369     --          too.
370     tcIdxTyInstDeclTL ldecl@(L loc decl) =
371       do { tything <- tcFamInstDecl ldecl
372          ; setSrcSpan loc $
373              when (isAssocFamily tything) $
374                addErr $ assocInClassErr (tcdName decl)
375          ; return tything
376          }
377     isAssocFamily (ATyCon tycon) =
378       case tyConFamInst_maybe tycon of
379         Nothing       -> panic "isAssocFamily: no family?!?"
380         Just (fam, _) -> isTyConAssoc fam
381     isAssocFamily _ = panic "isAssocFamily: no tycon?!?"
382
383 assocInClassErr :: Name -> SDoc
384 assocInClassErr name =
385   ptext (sLit "Associated type") <+> quotes (ppr name) <+>
386   ptext (sLit "must be inside a class instance")
387
388 addInsts :: [InstInfo Name] -> TcM a -> TcM a
389 addInsts infos thing_inside
390   = tcExtendLocalInstEnv (map iSpec infos) thing_inside
391
392 addFamInsts :: [TyThing] -> TcM a -> TcM a
393 addFamInsts tycons thing_inside
394   = tcExtendLocalFamInstEnv (map mkLocalFamInstTyThing tycons) thing_inside
395   where
396     mkLocalFamInstTyThing (ATyCon tycon) = mkLocalFamInst tycon
397     mkLocalFamInstTyThing tything        = pprPanic "TcInstDcls.addFamInsts"
398                                                     (ppr tything)
399 \end{code}
400
401 \begin{code}
402 tcLocalInstDecl1 :: LInstDecl Name
403                  -> TcM (InstInfo Name, [TyThing])
404         -- A source-file instance declaration
405         -- Type-check all the stuff before the "where"
406         --
407         -- We check for respectable instance type, and context
408 tcLocalInstDecl1 (L loc (InstDecl poly_ty binds uprags ats))
409   = setSrcSpan loc                      $
410     addErrCtxt (instDeclCtxt1 poly_ty)  $
411
412     do  { is_boot <- tcIsHsBoot
413         ; checkTc (not is_boot || (isEmptyLHsBinds binds && null uprags))
414                   badBootDeclErr
415
416         ; (tyvars, theta, tau) <- tcHsInstHead poly_ty
417
418         -- Now, check the validity of the instance.
419         ; (clas, inst_tys) <- checkValidInstHead tau
420         ; checkValidInstance tyvars theta clas inst_tys
421
422         -- Next, process any associated types.
423         ; idx_tycons <- recoverM (return []) $
424                      do { idx_tycons <- checkNoErrs $ mapAndRecoverM tcFamInstDecl ats
425                         ; checkValidAndMissingATs clas (tyvars, inst_tys)
426                                                   (zip ats idx_tycons)
427                         ; return idx_tycons }
428
429         -- Finally, construct the Core representation of the instance.
430         -- (This no longer includes the associated types.)
431         ; dfun_name <- newDFunName clas inst_tys (getLoc poly_ty)
432                 -- Dfun location is that of instance *header*
433         ; overlap_flag <- getOverlapFlag
434         ; let (eq_theta,dict_theta) = partition isEqPred theta
435               theta'         = eq_theta ++ dict_theta
436               dfun           = mkDictFunId dfun_name tyvars theta' clas inst_tys
437               ispec          = mkLocalInstance dfun overlap_flag
438
439         ; return (InstInfo { iSpec  = ispec,
440                              iBinds = VanillaInst binds uprags False },
441                   idx_tycons)
442         }
443   where
444     -- We pass in the source form and the type checked form of the ATs.  We
445     -- really need the source form only to be able to produce more informative
446     -- error messages.
447     checkValidAndMissingATs :: Class
448                             -> ([TyVar], [TcType])     -- instance types
449                             -> [(LTyClDecl Name,       -- source form of AT
450                                  TyThing)]             -- Core form of AT
451                             -> TcM ()
452     checkValidAndMissingATs clas inst_tys ats
453       = do { -- Issue a warning for each class AT that is not defined in this
454              -- instance.
455            ; let class_ats   = map tyConName (classATs clas)
456                  defined_ats = listToNameSet . map (tcdName.unLoc.fst)  $ ats
457                  omitted     = filterOut (`elemNameSet` defined_ats) class_ats
458            ; warn <- doptM Opt_WarnMissingMethods
459            ; mapM_ (warnTc warn . omittedATWarn) omitted
460
461              -- Ensure that all AT indexes that correspond to class parameters
462              -- coincide with the types in the instance head.  All remaining
463              -- AT arguments must be variables.  Also raise an error for any
464              -- type instances that are not associated with this class.
465            ; mapM_ (checkIndexes clas inst_tys) ats
466            }
467
468     checkIndexes clas inst_tys (hsAT, ATyCon tycon)
469 -- !!!TODO: check that this does the Right Thing for indexed synonyms, too!
470       = checkIndexes' clas inst_tys hsAT
471                       (tyConTyVars tycon,
472                        snd . fromJust . tyConFamInst_maybe $ tycon)
473     checkIndexes _ _ _ = panic "checkIndexes"
474
475     checkIndexes' clas (instTvs, instTys) hsAT (atTvs, atTys)
476       = let atName = tcdName . unLoc $ hsAT
477         in
478         setSrcSpan (getLoc hsAT)       $
479         addErrCtxt (atInstCtxt atName) $
480         case find ((atName ==) . tyConName) (classATs clas) of
481           Nothing     -> addErrTc $ badATErr clas atName  -- not in this class
482           Just atycon ->
483             case assocTyConArgPoss_maybe atycon of
484               Nothing   -> panic "checkIndexes': AT has no args poss?!?"
485               Just poss ->
486
487                 -- The following is tricky!  We need to deal with three
488                 -- complications: (1) The AT possibly only uses a subset of
489                 -- the class parameters as indexes and those it uses may be in
490                 -- a different order; (2) the AT may have extra arguments,
491                 -- which must be type variables; and (3) variables in AT and
492                 -- instance head will be different `Name's even if their
493                 -- source lexemes are identical.
494                 --
495                 -- e.g.    class C a b c where 
496                 --           data D b a :: * -> *           -- NB (1) b a, omits c
497                 --         instance C [x] Bool Char where 
498                 --           data D Bool [x] v = MkD x [v]  -- NB (2) v
499                 --                -- NB (3) the x in 'instance C...' have differnt
500                 --                --        Names to x's in 'data D...'
501                 --
502                 -- Re (1), `poss' contains a permutation vector to extract the
503                 -- class parameters in the right order.
504                 --
505                 -- Re (2), we wrap the (permuted) class parameters in a Maybe
506                 -- type and use Nothing for any extra AT arguments.  (First
507                 -- equation of `checkIndex' below.)
508                 --
509                 -- Re (3), we replace any type variable in the AT parameters
510                 -- that has the same source lexeme as some variable in the
511                 -- instance types with the instance type variable sharing its
512                 -- source lexeme.
513                 --
514                 let relevantInstTys = map (instTys !!) poss
515                     instArgs        = map Just relevantInstTys ++
516                                       repeat Nothing  -- extra arguments
517                     renaming        = substSameTyVar atTvs instTvs
518                 in
519                 zipWithM_ checkIndex (substTys renaming atTys) instArgs
520
521     checkIndex ty Nothing
522       | isTyVarTy ty         = return ()
523       | otherwise            = addErrTc $ mustBeVarArgErr ty
524     checkIndex ty (Just instTy)
525       | ty `tcEqType` instTy = return ()
526       | otherwise            = addErrTc $ wrongATArgErr ty instTy
527
528     listToNameSet = addListToNameSet emptyNameSet
529
530     substSameTyVar []       _            = emptyTvSubst
531     substSameTyVar (tv:tvs) replacingTvs =
532       let replacement = case find (tv `sameLexeme`) replacingTvs of
533                         Nothing  -> mkTyVarTy tv
534                         Just rtv -> mkTyVarTy rtv
535           --
536           tv1 `sameLexeme` tv2 =
537             nameOccName (tyVarName tv1) == nameOccName (tyVarName tv2)
538       in
539       extendTvSubst (substSameTyVar tvs replacingTvs) tv replacement
540 \end{code}
541
542
543 %************************************************************************
544 %*                                                                      *
545       Type-checking instance declarations, pass 2
546 %*                                                                      *
547 %************************************************************************
548
549 \begin{code}
550 tcInstDecls2 :: [LTyClDecl Name] -> [InstInfo Name]
551              -> TcM (LHsBinds Id, TcLclEnv)
552 -- (a) From each class declaration,
553 --      generate any default-method bindings
554 -- (b) From each instance decl
555 --      generate the dfun binding
556
557 tcInstDecls2 tycl_decls inst_decls
558   = do  { -- (a) Default methods from class decls
559           let class_decls = filter (isClassDecl . unLoc) tycl_decls
560         ; (dm_ids_s, dm_binds_s) <- mapAndUnzipM tcClassDecl2 class_decls
561                                     
562         ; tcExtendIdEnv (concat dm_ids_s) $ do 
563
564           -- (b) instance declarations
565         { inst_binds_s <- mapM tcInstDecl2 inst_decls
566
567           -- Done
568         ; let binds = unionManyBags dm_binds_s `unionBags`
569                       unionManyBags inst_binds_s
570         ; tcl_env <- getLclEnv -- Default method Ids in here
571         ; return (binds, tcl_env) } }
572
573 tcInstDecl2 :: InstInfo Name -> TcM (LHsBinds Id)
574 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = ibinds })
575   = recoverM (return emptyLHsBinds)             $
576     setSrcSpan loc                              $
577     addErrCtxt (instDeclCtxt2 (idType dfun_id)) $ 
578     tc_inst_decl2 dfun_id ibinds
579  where
580     dfun_id = instanceDFunId ispec
581     loc     = getSrcSpan dfun_id
582 \end{code}
583
584
585 \begin{code}
586 tc_inst_decl2 :: Id -> InstBindings Name -> TcM (LHsBinds Id)
587 -- Returns a binding for the dfun
588
589 ------------------------
590 -- Derived newtype instances; surprisingly tricky!
591 --
592 --      class Show a => Foo a b where ...
593 --      newtype N a = MkN (Tree [a]) deriving( Foo Int )
594 --
595 -- The newtype gives an FC axiom looking like
596 --      axiom CoN a ::  N a ~ Tree [a]
597 --   (see Note [Newtype coercions] in TyCon for this unusual form of axiom)
598 --
599 -- So all need is to generate a binding looking like:
600 --      dfunFooT :: forall a. (Foo Int (Tree [a], Show (N a)) => Foo Int (N a)
601 --      dfunFooT = /\a. \(ds:Show (N a)) (df:Foo (Tree [a])).
602 --                case df `cast` (Foo Int (sym (CoN a))) of
603 --                   Foo _ op1 .. opn -> Foo ds op1 .. opn
604 --
605 -- If there are no superclasses, matters are simpler, because we don't need the case
606 -- see Note [Newtype deriving superclasses] in TcDeriv.lhs
607
608 tc_inst_decl2 dfun_id (NewTypeDerived coi)
609   = do  { let rigid_info = InstSkol
610               origin     = SigOrigin rigid_info
611               inst_ty    = idType dfun_id
612               inst_tvs   = fst (tcSplitForAllTys inst_ty)
613         ; (inst_tvs', theta, inst_head_ty) <- tcSkolSigType rigid_info inst_ty
614                 -- inst_head_ty is a PredType
615
616         ; let (cls, cls_inst_tys) = tcSplitDFunHead inst_head_ty
617               (class_tyvars, sc_theta, _, _) = classBigSig cls
618               cls_tycon = classTyCon cls
619               sc_theta' = substTheta (zipOpenTvSubst class_tyvars cls_inst_tys) sc_theta
620               Just (initial_cls_inst_tys, last_ty) = snocView cls_inst_tys
621
622               (rep_ty, wrapper) 
623                  = case coi of
624                      IdCo   -> (last_ty, idHsWrapper)
625                      ACo co -> (snd (coercionKind co'), WpCast (mk_full_coercion co'))
626                             where
627                                co' = substTyWith inst_tvs (mkTyVarTys inst_tvs') co
628                                 -- NB: the free variable of coi are bound by the
629                                 -- universally quantified variables of the dfun_id
630                                 -- This is weird, and maybe we should make NewTypeDerived
631                                 -- carry a type-variable list too; but it works fine
632
633                  -----------------------
634                  --        mk_full_coercion
635                  -- The inst_head looks like (C s1 .. sm (T a1 .. ak))
636                  -- But we want the coercion (C s1 .. sm (sym (CoT a1 .. ak)))
637                  --        with kind (C s1 .. sm (T a1 .. ak)  ~  C s1 .. sm <rep_ty>)
638                  --        where rep_ty is the (eta-reduced) type rep of T
639                  -- So we just replace T with CoT, and insert a 'sym'
640                  -- NB: we know that k will be >= arity of CoT, because the latter fully eta-reduced
641
642               mk_full_coercion co = mkTyConApp cls_tycon 
643                                          (initial_cls_inst_tys ++ [mkSymCoercion co])
644                  -- Full coercion : (Foo Int (Tree [a]) ~ Foo Int (N a)
645
646               rep_pred = mkClassPred cls (initial_cls_inst_tys ++ [rep_ty])
647                  -- In our example, rep_pred is (Foo Int (Tree [a]))
648
649         ; sc_loc     <- getInstLoc InstScOrigin
650         ; sc_dicts   <- newDictBndrs sc_loc sc_theta'
651         ; inst_loc   <- getInstLoc origin
652         ; dfun_dicts <- newDictBndrs inst_loc theta
653         ; rep_dict   <- newDictBndr inst_loc rep_pred
654         ; this_dict  <- newDictBndr inst_loc (mkClassPred cls cls_inst_tys)
655
656         -- Figure out bindings for the superclass context from dfun_dicts
657         -- Don't include this_dict in the 'givens', else
658         -- sc_dicts get bound by just selecting from this_dict!!
659         ; sc_binds <- addErrCtxt superClassCtxt $
660                       tcSimplifySuperClasses inst_loc this_dict dfun_dicts 
661                                              (rep_dict:sc_dicts)
662
663         -- It's possible that the superclass stuff might unified something
664         -- in the envt with one of the clas_tyvars
665         ; checkSigTyVars inst_tvs'
666
667         ; let coerced_rep_dict = wrapId wrapper (instToId rep_dict)
668
669         ; body <- make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
670         ; let dict_bind = mkVarBind (instToId this_dict) (noLoc body)
671
672         ; return (unitBag $ noLoc $
673                   AbsBinds inst_tvs' (map instToVar dfun_dicts)
674                             [(inst_tvs', dfun_id, instToId this_dict, [])]
675                             (dict_bind `consBag` sc_binds)) }
676   where
677       -----------------------
678       --     (make_body C tys scs coreced_rep_dict)
679       --                returns
680       --     (case coerced_rep_dict of { C _ ops -> C scs ops })
681       -- But if there are no superclasses, it returns just coerced_rep_dict
682       -- See Note [Newtype deriving superclasses] in TcDeriv.lhs
683
684     make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
685         | null sc_dicts         -- Case (a)
686         = return coerced_rep_dict
687         | otherwise             -- Case (b)
688         = do { op_ids            <- newSysLocalIds (fsLit "op") op_tys
689              ; dummy_sc_dict_ids <- newSysLocalIds (fsLit "sc") (map idType sc_dict_ids)
690              ; let the_pat = ConPatOut { pat_con = noLoc cls_data_con, pat_tvs = [],
691                                          pat_dicts = dummy_sc_dict_ids,
692                                          pat_binds = emptyLHsBinds,
693                                          pat_args = PrefixCon (map nlVarPat op_ids),
694                                          pat_ty = pat_ty}
695                    the_match = mkSimpleMatch [noLoc the_pat] the_rhs
696                    the_rhs = mkHsConApp cls_data_con cls_inst_tys $
697                              map HsVar (sc_dict_ids ++ op_ids)
698
699                 -- Warning: this HsCase scrutinises a value with a PredTy, which is
700                 --          never otherwise seen in Haskell source code. It'd be
701                 --          nicer to generate Core directly!
702              ; return (HsCase (noLoc coerced_rep_dict) $
703                        MatchGroup [the_match] (mkFunTy pat_ty pat_ty)) }
704         where
705           sc_dict_ids  = map instToId sc_dicts
706           pat_ty       = mkTyConApp cls_tycon cls_inst_tys
707           cls_data_con = head (tyConDataCons cls_tycon)
708           cls_arg_tys  = dataConInstArgTys cls_data_con cls_inst_tys
709           op_tys       = dropList sc_dict_ids cls_arg_tys
710
711 ------------------------
712 -- Ordinary instances
713
714 tc_inst_decl2 dfun_id (VanillaInst monobinds uprags standalone_deriv)
715   = do { let rigid_info = InstSkol
716              inst_ty    = idType dfun_id
717              loc        = getSrcSpan dfun_id
718
719         -- Instantiate the instance decl with skolem constants
720        ; (inst_tyvars', dfun_theta', inst_head') <- tcSkolSigType rigid_info inst_ty
721                 -- These inst_tyvars' scope over the 'where' part
722                 -- Those tyvars are inside the dfun_id's type, which is a bit
723                 -- bizarre, but OK so long as you realise it!
724        ; let
725             (clas, inst_tys') = tcSplitDFunHead inst_head'
726             (class_tyvars, sc_theta, sc_sels, op_items) = classBigSig clas
727
728              -- Instantiate the super-class context with inst_tys
729             sc_theta' = substTheta (zipOpenTvSubst class_tyvars inst_tys') sc_theta
730             origin    = SigOrigin rigid_info
731
732          -- Create dictionary Ids from the specified instance contexts.
733        ; inst_loc   <- getInstLoc origin
734        ; dfun_dicts <- newDictBndrs inst_loc dfun_theta'        -- Includes equalities
735        ; this_dict  <- newDictBndr inst_loc (mkClassPred clas inst_tys')
736                 -- Default-method Ids may be mentioned in synthesised RHSs,
737                 -- but they'll already be in the environment.
738
739        
740         -- Cook up a binding for "this = df d1 .. dn",
741         -- to use in each method binding
742         -- Need to clone the dict in case it is floated out, and
743         -- then clashes with its friends
744        ; cloned_this <- cloneDict this_dict
745        ; let cloned_this_bind = mkVarBind (instToId cloned_this) $ 
746                                 L loc $ wrapId app_wrapper dfun_id
747              app_wrapper = mkWpApps dfun_lam_vars <.> mkWpTyApps (mkTyVarTys inst_tyvars')
748              dfun_lam_vars = map instToVar dfun_dicts   -- Includes equalities
749              nested_this_pair 
750                 | null inst_tyvars' && null dfun_theta' = (this_dict, emptyBag)
751                 | otherwise = (cloned_this, unitBag cloned_this_bind)
752
753        -- Deal with 'SPECIALISE instance' pragmas
754        -- See Note [SPECIALISE instance pragmas]
755        ; let spec_inst_sigs = filter isSpecInstLSig uprags
756              -- The filter removes the pragmas for methods
757        ; spec_inst_prags <- mapM (wrapLocM (tcSpecInst dfun_id)) spec_inst_sigs
758
759         -- Typecheck the methods
760        ; let prag_fn = mkPragFun uprags 
761              tc_meth = tcInstanceMethod loc standalone_deriv
762                                         clas inst_tyvars'
763                                         dfun_dicts inst_tys'
764                                         nested_this_pair 
765                                         prag_fn spec_inst_prags monobinds
766
767        ; (meth_ids, meth_binds) <- tcExtendTyVarEnv inst_tyvars' $
768                                    mapAndUnzipM tc_meth op_items 
769
770          -- Figure out bindings for the superclass context
771        ; sc_loc   <- getInstLoc InstScOrigin
772        ; sc_dicts <- newDictOccs sc_loc sc_theta'               -- These are wanted
773        ; let tc_sc = tcSuperClass inst_loc inst_tyvars' dfun_dicts nested_this_pair
774        ; (sc_ids, sc_binds) <- mapAndUnzipM tc_sc (sc_sels `zip` sc_dicts)
775
776         -- It's possible that the superclass stuff might unified
777         -- something in the envt with one of the inst_tyvars'
778        ; checkSigTyVars inst_tyvars'
779
780        -- Create the result bindings
781        ; let dict_constr   = classDataCon clas
782              this_dict_id  = instToId this_dict
783              dict_bind     = mkVarBind this_dict_id dict_rhs
784              dict_rhs      = foldl mk_app inst_constr (sc_ids ++ meth_ids)
785              inst_constr   = L loc $ wrapId (mkWpTyApps inst_tys')
786                                             (dataConWrapId dict_constr)
787                      -- We don't produce a binding for the dict_constr; instead we
788                      -- rely on the simplifier to unfold this saturated application
789                      -- We do this rather than generate an HsCon directly, because
790                      -- it means that the special cases (e.g. dictionary with only one
791                      -- member) are dealt with by the common MkId.mkDataConWrapId code rather
792                      -- than needing to be repeated here.
793
794              mk_app :: LHsExpr Id -> Id -> LHsExpr Id
795              mk_app fun arg_id = L loc (HsApp fun (L loc (wrapId arg_wrapper arg_id)))
796              arg_wrapper = mkWpApps dfun_lam_vars <.> mkWpTyApps (mkTyVarTys inst_tyvars')
797
798              dfun_id_w_fun = dfun_id 
799                              `setIdUnfolding` mkDFunUnfolding dict_constr (sc_ids ++ meth_ids)
800                              `setInlinePragma` dfunInlinePragma
801
802              main_bind = noLoc $ AbsBinds
803                                  inst_tyvars'
804                                  dfun_lam_vars
805                                  [(inst_tyvars', dfun_id_w_fun, this_dict_id, spec_inst_prags)]
806                                  (unitBag dict_bind)
807
808        ; showLIE (text "instance")
809        ; return (unitBag main_bind    `unionBags` 
810                  listToBag meth_binds `unionBags` 
811                  listToBag sc_binds) }
812
813
814 ------------------------------
815 tcSuperClass :: InstLoc -> [TyVar] -> [Inst]
816              -> (Inst, LHsBinds Id)
817              -> (Id, Inst) -> TcM (Id, LHsBind Id)
818 -- Build a top level decl like
819 --      sc_op = /\a \d. let this = ... in 
820 --                      let sc = ... in
821 --                      sc
822 -- The "this" part is just-in-case (discarded if not used)
823 -- See Note [Recursive superclasses]
824 tcSuperClass inst_loc tyvars dicts (this_dict, this_bind)
825              (sc_sel, sc_dict)
826   = addErrCtxt superClassCtxt $
827     do { sc_binds <- tcSimplifySuperClasses inst_loc 
828                                 this_dict dicts [sc_dict]
829          -- Don't include this_dict in the 'givens', else
830          -- sc_dicts get bound by just selecting  from this_dict!!
831
832        ; uniq <- newUnique
833        ; let sc_op_ty = mkSigmaTy tyvars (map dictPred dicts) 
834                                   (mkPredTy (dictPred sc_dict))
835              sc_op_name = mkDerivedInternalName mkClassOpAuxOcc uniq
836                                                 (getName sc_sel)
837              sc_op_id   = mkLocalId sc_op_name sc_op_ty
838              sc_id      = instToVar sc_dict
839              sc_op_bind = AbsBinds tyvars 
840                              (map instToVar dicts) 
841                              [(tyvars, sc_op_id, sc_id, [])]
842                              (this_bind `unionBags` sc_binds)
843
844        ; return (sc_op_id, noLoc sc_op_bind) }
845 \end{code}
846
847 Note [Recursive superclasses]
848 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
849 See Trac #1470 for why we would *like* to add "this_dict" to the 
850 available instances here.  But we can't do so because then the superclases
851 get satisfied by selection from this_dict, and that leads to an immediate
852 loop.  What we need is to add this_dict to Avails without adding its 
853 superclasses, and we currently have no way to do that.
854
855 Note [SPECIALISE instance pragmas]
856 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
857 Consider
858
859    instance (Ix a, Ix b) => Ix (a,b) where
860      {-# SPECIALISE instance Ix (Int,Int) #-}
861      range (x,y) = ...
862
863 We do *not* want to make a specialised version of the dictionary
864 function.  Rather, we want specialised versions of each method.
865 Thus we should generate something like this:
866
867   $dfIx :: (Ix a, Ix x) => Ix (a,b)
868   {- DFUN [$crange, ...] -}
869   $dfIx da db = Ix ($crange da db) (...other methods...)
870
871   $dfIxPair :: (Ix a, Ix x) => Ix (a,b)
872   {- DFUN [$crangePair, ...] -}
873   $dfIxPair = Ix ($crangePair da db) (...other methods...)
874
875   $crange :: (Ix a, Ix b) -> ((a,b),(a,b)) -> [(a,b)]
876   {-# SPECIALISE $crange :: ((Int,Int),(Int,Int)) -> [(Int,Int)] #-}
877   $crange da db = <blah>
878
879   {-# RULE  range ($dfIx da db) = $crange da db #-}
880
881 Note that  
882
883   * The RULE is unaffected by the specialisation.  We don't want to
884     specialise $dfIx, because then it would need a specialised RULE
885     which is a pain.  The single RULE works fine at all specialisations.
886     See Note [How instance declarations are translated] above
887
888   * Instead, we want to specialise the *method*, $crange
889
890 In practice, rather than faking up a SPECIALISE pragama for each
891 method (which is painful, since we'd have to figure out its
892 specialised type), we call tcSpecPrag *as if* were going to specialise
893 $dfIx -- you can see that in the call to tcSpecInst.  That generates a
894 SpecPrag which, as it turns out, can be used unchanged for each method.
895 The "it turns out" bit is delicate, but it works fine!
896
897 \begin{code}
898 tcSpecInst :: Id -> Sig Name -> TcM SpecPrag
899 tcSpecInst dfun_id prag@(SpecInstSig hs_ty) 
900   = addErrCtxt (spec_ctxt prag) $
901     do  { let name = idName dfun_id
902         ; (tyvars, theta, tau) <- tcHsInstHead hs_ty    
903         ; let spec_ty = mkSigmaTy tyvars theta tau
904         ; co_fn <- tcSubExp (SpecPragOrigin name) (idType dfun_id) spec_ty
905         ; return (SpecPrag co_fn defaultInlinePragma) }
906   where
907     spec_ctxt prag = hang (ptext (sLit "In the SPECIALISE pragma")) 2 (ppr prag)
908
909 tcSpecInst _  _ = panic "tcSpecInst"
910 \end{code}
911
912 %************************************************************************
913 %*                                                                      *
914       Type-checking an instance method
915 %*                                                                      *
916 %************************************************************************
917
918 tcInstanceMethod
919 - Make the method bindings, as a [(NonRec, HsBinds)], one per method
920 - Remembering to use fresh Name (the instance method Name) as the binder
921 - Bring the instance method Ids into scope, for the benefit of tcInstSig
922 - Use sig_fn mapping instance method Name -> instance tyvars
923 - Ditto prag_fn
924 - Use tcValBinds to do the checking
925
926 \begin{code}
927 tcInstanceMethod :: SrcSpan -> Bool -> Class -> [TcTyVar] -> [Inst]
928                  -> [TcType]
929                  -> (Inst, LHsBinds Id)  -- "This" and its binding
930                  -> TcPragFun            -- Local prags
931                  -> [LSpecPrag]          -- Arising from 'SPECLALISE instance'
932                  -> LHsBinds Name 
933                  -> (Id, DefMeth)
934                  -> TcM (Id, LHsBind Id)
935         -- The returned inst_meth_ids all have types starting
936         --      forall tvs. theta => ...
937
938 tcInstanceMethod loc standalone_deriv clas tyvars dfun_dicts inst_tys 
939                  (this_dict, this_dict_bind)
940                  prag_fn spec_inst_prags binds_in (sel_id, dm_info)
941   = do  { uniq <- newUnique
942         ; let meth_name = mkDerivedInternalName mkClassOpAuxOcc uniq sel_name
943         ; local_meth_name <- newLocalName sel_name
944           -- Base the local_meth_name on the selector name, becuase
945           -- type errors from tcInstanceMethodBody come from here
946
947         ; let local_meth_ty = instantiateMethod clas sel_id inst_tys
948               meth_ty = mkSigmaTy tyvars (map dictPred dfun_dicts) local_meth_ty
949               meth_id       = mkLocalId meth_name meth_ty
950               local_meth_id = mkLocalId local_meth_name local_meth_ty
951
952             --------------
953               tc_body rn_bind 
954                 = add_meth_ctxt rn_bind $
955                   do { (meth_id1, spec_prags) <- tcPrags NonRecursive False True 
956                                                     meth_id (prag_fn sel_name)
957                      ; tcInstanceMethodBody (instLoc this_dict)
958                                     tyvars dfun_dicts
959                                     ([this_dict], this_dict_bind)
960                                     meth_id1 local_meth_id
961                                     meth_sig_fn 
962                                     (spec_inst_prags ++ spec_prags) 
963                                     rn_bind }
964
965             --------------
966               tc_default :: DefMeth -> TcM (Id, LHsBind Id)
967                 -- The user didn't supply a method binding, so we have to make 
968                 -- up a default binding, in a way depending on the default-method info
969
970               tc_default NoDefMeth          -- No default method at all
971                 = do { warnMissingMethod sel_id
972                      ; return (meth_id, mkVarBind meth_id $ 
973                                         mkLHsWrap lam_wrapper error_rhs) }
974               
975               tc_default GenDefMeth    -- Derivable type classes stuff
976                 = do { meth_bind <- mkGenericDefMethBind clas inst_tys sel_id local_meth_name
977                      ; tc_body meth_bind }
978                   
979               tc_default DefMeth        -- An polymorphic default method
980                 = do {   -- Build the typechecked version directly, 
981                          -- without calling typecheck_method; 
982                          -- see Note [Default methods in instances]
983                          -- Generate   /\as.\ds. let this = df as ds 
984                          --                      in $dm inst_tys this
985                          -- The 'let' is necessary only because HsSyn doesn't allow
986                          -- you to apply a function to a dictionary *expression*.
987                        dm_name <- lookupGlobalOccRn (mkDefMethRdrName sel_name)
988                                         -- Might not be imported, but will be an OrigName
989                      ; dm_id <- tcLookupId dm_name
990                      ; inline_id <- tcLookupId inlineIdName
991                      ; let dm_inline_prag = idInlinePragma dm_id
992                            dm_app = HsWrap (WpApp (instToId this_dict) <.> mkWpTyApps inst_tys) $
993                                     HsVar dm_id 
994                            rhs | isInlinePragma dm_inline_prag  -- See Note [INLINE and default methods]
995                                = HsApp (L loc (HsWrap (WpTyApp local_meth_ty) (HsVar inline_id)))
996                                        (L loc dm_app)
997                                | otherwise = dm_app
998
999                            meth_bind = L loc $ VarBind { var_id = local_meth_id
1000                                                        , var_rhs = L loc rhs 
1001                                                        , var_inline = False }
1002                            meth_id1 = meth_id `setInlinePragma` dm_inline_prag
1003                                     -- Copy the inline pragma (if any) from the default
1004                                     -- method to this version. Note [INLINE and default methods]
1005                                     
1006                            bind = AbsBinds { abs_tvs = tyvars, abs_dicts =  dfun_lam_vars
1007                                            , abs_exports = [( tyvars, meth_id1
1008                                                             , local_meth_id, spec_inst_prags)]
1009                                            , abs_binds = this_dict_bind `unionBags` unitBag meth_bind }
1010                      -- Default methods in an instance declaration can't have their own 
1011                      -- INLINE or SPECIALISE pragmas. It'd be possible to allow them, but
1012                      -- currently they are rejected with 
1013                      --           "INLINE pragma lacks an accompanying binding"
1014
1015                      ; return (meth_id1, L loc bind) } 
1016
1017         ; case findMethodBind sel_name local_meth_name binds_in of
1018             Just user_bind -> tc_body user_bind    -- User-supplied method binding
1019             Nothing        -> tc_default dm_info   -- None supplied
1020         }
1021   where
1022     sel_name = idName sel_id
1023
1024     meth_sig_fn _ = Just []     -- The 'Just' says "yes, there's a type sig"
1025         -- But there are no scoped type variables from local_method_id
1026         -- Only the ones from the instance decl itself, which are already
1027         -- in scope.  Example:
1028         --      class C a where { op :: forall b. Eq b => ... }
1029         --      instance C [c] where { op = <rhs> }
1030         -- In <rhs>, 'c' is scope but 'b' is not!
1031
1032     error_rhs    = L loc $ HsApp error_fun error_msg
1033     error_fun    = L loc $ wrapId (WpTyApp meth_tau) nO_METHOD_BINDING_ERROR_ID
1034     error_msg    = L loc (HsLit (HsStringPrim (mkFastString error_string)))
1035     meth_tau     = funResultTy (applyTys (idType sel_id) inst_tys)
1036     error_string = showSDoc (hcat [ppr loc, text "|", ppr sel_id ])
1037
1038     dfun_lam_vars = map instToVar dfun_dicts
1039     lam_wrapper   = mkWpTyLams tyvars <.> mkWpLams dfun_lam_vars
1040
1041         -- For instance decls that come from standalone deriving clauses
1042         -- we want to print out the full source code if there's an error
1043         -- because otherwise the user won't see the code at all
1044     add_meth_ctxt rn_bind thing 
1045       | standalone_deriv = addLandmarkErrCtxt (derivBindCtxt clas inst_tys rn_bind) thing
1046       | otherwise        = thing
1047
1048 wrapId :: HsWrapper -> id -> HsExpr id
1049 wrapId wrapper id = mkHsWrap wrapper (HsVar id)
1050
1051 derivBindCtxt :: Class -> [Type ] -> LHsBind Name -> SDoc
1052 derivBindCtxt clas tys bind
1053    = vcat [ ptext (sLit "When typechecking a standalone-derived method for")
1054             <+> quotes (pprClassPred clas tys) <> colon
1055           , nest 2 $ pprSetDepth AllTheWay $ ppr bind ]
1056
1057 warnMissingMethod :: Id -> TcM ()
1058 warnMissingMethod sel_id
1059   = do { warn <- doptM Opt_WarnMissingMethods           
1060        ; warnTc (warn  -- Warn only if -fwarn-missing-methods
1061                  && not (startsWithUnderscore (getOccName sel_id)))
1062                                         -- Don't warn about _foo methods
1063                 (ptext (sLit "No explicit method nor default method for")
1064                  <+> quotes (ppr sel_id)) }
1065 \end{code}
1066
1067 Note [Export helper functions]
1068 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1069 We arrange to export the "helper functions" of an instance declaration,
1070 so that they are not subject to preInlineUnconditionally, even if their
1071 RHS is trivial.  Reason: they are mentioned in the DFunUnfolding of
1072 the dict fun as Ids, not as CoreExprs, so we can't substitute a 
1073 non-variable for them.
1074
1075 We could change this by making DFunUnfoldings have CoreExprs, but it
1076 seems a bit simpler this way.
1077
1078 Note [Default methods in instances]
1079 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1080 Consider this
1081
1082    class Baz v x where
1083       foo :: x -> x
1084       foo y = <blah>
1085
1086    instance Baz Int Int
1087
1088 From the class decl we get
1089
1090    $dmfoo :: forall v x. Baz v x => x -> x
1091    $dmfoo y = <blah>
1092
1093 Notice that the type is ambiguous.  That's fine, though. The instance decl generates
1094
1095    $dBazIntInt = MkBaz fooIntInt
1096    fooIntInt = $dmfoo Int Int $dBazIntInt
1097
1098 BUT this does mean we must generate the dictionary translation of
1099 fooIntInt directly, rather than generating source-code and
1100 type-checking it.  That was the bug in Trac #1061. In any case it's
1101 less work to generate the translated version!
1102
1103 Note [INLINE and default methods]
1104 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1105 We *copy* any INLINE pragma from the default method to the instance.
1106 Example:
1107   class Foo a where
1108     op1, op2 :: Bool -> a -> a
1109
1110     {-# INLINE op1 #-}
1111     op1 b x = op2 (not b) x
1112
1113   instance Foo Int where
1114     op2 b x = <blah>
1115
1116 Then we generate:
1117
1118   {-# INLINE $dmop1 #-}
1119   $dmop1 d b x = op2 d (not b) x
1120
1121   $fFooInt = MkD $cop1 $cop2
1122
1123   {-# INLINE $cop1 #-}
1124   $cop1 = inline $dmop1 $fFooInt
1125
1126   $cop2 = <blah>
1127
1128 Note carefully:
1129   a) We copy $dmop1's inline pragma to $cop1.  Otherwise 
1130      we'll just inline the former in the latter and stop, which 
1131      isn't what the user expected
1132
1133   b) We use the magic 'inline' Id to ensure that $dmop1 really is
1134      inlined in $cop1, even though the latter itself has an INLINE pragma
1135      That is important to allow the mutual recursion between $fooInt and
1136      $cop1 to be broken
1137
1138 This is all regrettably delicate.
1139
1140
1141 %************************************************************************
1142 %*                                                                      *
1143 \subsection{Error messages}
1144 %*                                                                      *
1145 %************************************************************************
1146
1147 \begin{code}
1148 instDeclCtxt1 :: LHsType Name -> SDoc
1149 instDeclCtxt1 hs_inst_ty
1150   = inst_decl_ctxt (case unLoc hs_inst_ty of
1151                         HsForAllTy _ _ _ (L _ (HsPredTy pred)) -> ppr pred
1152                         HsPredTy pred                    -> ppr pred
1153                         _                                -> ppr hs_inst_ty)     -- Don't expect this
1154 instDeclCtxt2 :: Type -> SDoc
1155 instDeclCtxt2 dfun_ty
1156   = inst_decl_ctxt (ppr (mkClassPred cls tys))
1157   where
1158     (_,cls,tys) = tcSplitDFunTy dfun_ty
1159
1160 inst_decl_ctxt :: SDoc -> SDoc
1161 inst_decl_ctxt doc = ptext (sLit "In the instance declaration for") <+> quotes doc
1162
1163 superClassCtxt :: SDoc
1164 superClassCtxt = ptext (sLit "When checking the super-classes of an instance declaration")
1165
1166 atInstCtxt :: Name -> SDoc
1167 atInstCtxt name = ptext (sLit "In the associated type instance for") <+>
1168                   quotes (ppr name)
1169
1170 mustBeVarArgErr :: Type -> SDoc
1171 mustBeVarArgErr ty =
1172   sep [ ptext (sLit "Arguments that do not correspond to a class parameter") <+>
1173         ptext (sLit "must be variables")
1174       , ptext (sLit "Instead of a variable, found") <+> ppr ty
1175       ]
1176
1177 wrongATArgErr :: Type -> Type -> SDoc
1178 wrongATArgErr ty instTy =
1179   sep [ ptext (sLit "Type indexes must match class instance head")
1180       , ptext (sLit "Found") <+> quotes (ppr ty)
1181         <+> ptext (sLit "but expected") <+> quotes (ppr instTy)
1182       ]
1183 \end{code}