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