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