Completely new treatment of INLINE pragmas (big patch)
[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    ( lookupImportedName )
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 atDecl ->
479             case assocTyConArgPoss_maybe atDecl 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                 -- Re (1), `poss' contains a permutation vector to extract the
492                 -- class parameters in the right order.
493                 --
494                 -- Re (2), we wrap the (permuted) class parameters in a Maybe
495                 -- type and use Nothing for any extra AT arguments.  (First
496                 -- equation of `checkIndex' below.)
497                 --
498                 -- Re (3), we replace any type variable in the AT parameters
499                 -- that has the same source lexeme as some variable in the
500                 -- instance types with the instance type variable sharing its
501                 -- source lexeme.
502                 --
503                 let relevantInstTys = map (instTys !!) poss
504                     instArgs        = map Just relevantInstTys ++
505                                       repeat Nothing  -- extra arguments
506                     renaming        = substSameTyVar atTvs instTvs
507                 in
508                 zipWithM_ checkIndex (substTys renaming atTys) instArgs
509
510     checkIndex ty Nothing
511       | isTyVarTy ty         = return ()
512       | otherwise            = addErrTc $ mustBeVarArgErr ty
513     checkIndex ty (Just instTy)
514       | ty `tcEqType` instTy = return ()
515       | otherwise            = addErrTc $ wrongATArgErr ty instTy
516
517     listToNameSet = addListToNameSet emptyNameSet
518
519     substSameTyVar []       _            = emptyTvSubst
520     substSameTyVar (tv:tvs) replacingTvs =
521       let replacement = case find (tv `sameLexeme`) replacingTvs of
522                         Nothing  -> mkTyVarTy tv
523                         Just rtv -> mkTyVarTy rtv
524           --
525           tv1 `sameLexeme` tv2 =
526             nameOccName (tyVarName tv1) == nameOccName (tyVarName tv2)
527       in
528       extendTvSubst (substSameTyVar tvs replacingTvs) tv replacement
529 \end{code}
530
531
532 %************************************************************************
533 %*                                                                      *
534       Type-checking instance declarations, pass 2
535 %*                                                                      *
536 %************************************************************************
537
538 \begin{code}
539 tcInstDecls2 :: [LTyClDecl Name] -> [InstInfo Name]
540              -> TcM (LHsBinds Id, TcLclEnv)
541 -- (a) From each class declaration,
542 --      generate any default-method bindings
543 -- (b) From each instance decl
544 --      generate the dfun binding
545
546 tcInstDecls2 tycl_decls inst_decls
547   = do  { -- (a) Default methods from class decls
548           (dm_binds_s, dm_ids_s) <- mapAndUnzipM tcClassDecl2 $
549                                     filter (isClassDecl.unLoc) tycl_decls
550         ; tcExtendIdEnv (concat dm_ids_s) $ do
551
552           -- (b) instance declarations
553         ; inst_binds_s <- mapM tcInstDecl2 inst_decls
554
555           -- Done
556         ; let binds = unionManyBags dm_binds_s `unionBags`
557                       unionManyBags inst_binds_s
558         ; tcl_env <- getLclEnv -- Default method Ids in here
559         ; return (binds, tcl_env) }
560 \end{code}
561
562
563 \begin{code}
564 tcInstDecl2 :: InstInfo Name -> TcM (LHsBinds Id)
565 -- Returns a binding for the dfun
566
567 ------------------------
568 -- Derived newtype instances; surprisingly tricky!
569 --
570 --      class Show a => Foo a b where ...
571 --      newtype N a = MkN (Tree [a]) deriving( Foo Int )
572 --
573 -- The newtype gives an FC axiom looking like
574 --      axiom CoN a ::  N a ~ Tree [a]
575 --   (see Note [Newtype coercions] in TyCon for this unusual form of axiom)
576 --
577 -- So all need is to generate a binding looking like:
578 --      dfunFooT :: forall a. (Foo Int (Tree [a], Show (N a)) => Foo Int (N a)
579 --      dfunFooT = /\a. \(ds:Show (N a)) (df:Foo (Tree [a])).
580 --                case df `cast` (Foo Int (sym (CoN a))) of
581 --                   Foo _ op1 .. opn -> Foo ds op1 .. opn
582 --
583 -- If there are no superclasses, matters are simpler, because we don't need the case
584 -- see Note [Newtype deriving superclasses] in TcDeriv.lhs
585
586 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = NewTypeDerived })
587   = do  { let dfun_id      = instanceDFunId ispec
588               rigid_info   = InstSkol
589               origin       = SigOrigin rigid_info
590               inst_ty      = idType dfun_id
591         ; (inst_tvs', theta, inst_head_ty) <- tcSkolSigType rigid_info inst_ty
592                 -- inst_head_ty is a PredType
593
594         ; let (cls, cls_inst_tys) = tcSplitDFunHead inst_head_ty
595               (class_tyvars, sc_theta, _, _) = classBigSig cls
596               cls_tycon = classTyCon cls
597               sc_theta' = substTheta (zipOpenTvSubst class_tyvars cls_inst_tys) sc_theta
598
599               Just (initial_cls_inst_tys, last_ty) = snocView cls_inst_tys
600               (nt_tycon, tc_args) = tcSplitTyConApp last_ty     -- Can't fail
601               rep_ty              = newTyConInstRhs nt_tycon tc_args
602
603               rep_pred     = mkClassPred cls (initial_cls_inst_tys ++ [rep_ty])
604                                 -- In our example, rep_pred is (Foo Int (Tree [a]))
605               the_coercion = make_coercion cls_tycon initial_cls_inst_tys nt_tycon tc_args
606                                 -- Coercion of kind (Foo Int (Tree [a]) ~ Foo Int (N a)
607
608         ; sc_loc     <- getInstLoc InstScOrigin
609         ; sc_dicts   <- newDictBndrs sc_loc sc_theta'
610         ; inst_loc   <- getInstLoc origin
611         ; dfun_dicts <- newDictBndrs inst_loc theta
612         ; this_dict  <- newDictBndr inst_loc (mkClassPred cls cls_inst_tys)
613         ; rep_dict   <- newDictBndr inst_loc rep_pred
614
615         -- Figure out bindings for the superclass context from dfun_dicts
616         -- Don't include this_dict in the 'givens', else
617         -- sc_dicts get bound by just selecting from this_dict!!
618         ; sc_binds <- addErrCtxt superClassCtxt $
619                       tcSimplifySuperClasses inst_loc this_dict dfun_dicts 
620                                              (rep_dict:sc_dicts)
621
622         -- It's possible that the superclass stuff might unified something
623         -- in the envt with one of the clas_tyvars
624         ; checkSigTyVars inst_tvs'
625
626         ; let coerced_rep_dict = wrapId the_coercion (instToId rep_dict)
627
628         ; body <- make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
629         ; let dict_bind = mkVarBind (instToId this_dict) (noLoc body)
630
631         ; return (unitBag $ noLoc $
632                   AbsBinds inst_tvs' (map instToVar dfun_dicts)
633                             [(inst_tvs', dfun_id, instToId this_dict, [])]
634                             (dict_bind `consBag` sc_binds)) }
635   where
636       -----------------------
637       --        make_coercion
638       -- The inst_head looks like (C s1 .. sm (T a1 .. ak))
639       -- But we want the coercion (C s1 .. sm (sym (CoT a1 .. ak)))
640       --        with kind (C s1 .. sm (T a1 .. ak)  ~  C s1 .. sm <rep_ty>)
641       --        where rep_ty is the (eta-reduced) type rep of T
642       -- So we just replace T with CoT, and insert a 'sym'
643       -- NB: we know that k will be >= arity of CoT, because the latter fully eta-reduced
644
645     make_coercion cls_tycon initial_cls_inst_tys nt_tycon tc_args
646         | Just co_con <- newTyConCo_maybe nt_tycon
647         , let co = mkSymCoercion (mkTyConApp co_con tc_args)
648         = WpCast (mkTyConApp cls_tycon (initial_cls_inst_tys ++ [co]))
649         | otherwise     -- The newtype is transparent; no need for a cast
650         = idHsWrapper
651
652       -----------------------
653       --     (make_body C tys scs coreced_rep_dict)
654       --                returns
655       --     (case coerced_rep_dict of { C _ ops -> C scs ops })
656       -- But if there are no superclasses, it returns just coerced_rep_dict
657       -- See Note [Newtype deriving superclasses] in TcDeriv.lhs
658
659     make_body cls_tycon cls_inst_tys sc_dicts coerced_rep_dict
660         | null sc_dicts         -- Case (a)
661         = return coerced_rep_dict
662         | otherwise             -- Case (b)
663         = do { op_ids            <- newSysLocalIds (fsLit "op") op_tys
664              ; dummy_sc_dict_ids <- newSysLocalIds (fsLit "sc") (map idType sc_dict_ids)
665              ; let the_pat = ConPatOut { pat_con = noLoc cls_data_con, pat_tvs = [],
666                                          pat_dicts = dummy_sc_dict_ids,
667                                          pat_binds = emptyLHsBinds,
668                                          pat_args = PrefixCon (map nlVarPat op_ids),
669                                          pat_ty = pat_ty}
670                    the_match = mkSimpleMatch [noLoc the_pat] the_rhs
671                    the_rhs = mkHsConApp cls_data_con cls_inst_tys $
672                              map HsVar (sc_dict_ids ++ op_ids)
673
674                 -- Warning: this HsCase scrutinises a value with a PredTy, which is
675                 --          never otherwise seen in Haskell source code. It'd be
676                 --          nicer to generate Core directly!
677              ; return (HsCase (noLoc coerced_rep_dict) $
678                        MatchGroup [the_match] (mkFunTy pat_ty pat_ty)) }
679         where
680           sc_dict_ids  = map instToId sc_dicts
681           pat_ty       = mkTyConApp cls_tycon cls_inst_tys
682           cls_data_con = head (tyConDataCons cls_tycon)
683           cls_arg_tys  = dataConInstArgTys cls_data_con cls_inst_tys
684           op_tys       = dropList sc_dict_ids cls_arg_tys
685
686 ------------------------
687 -- Ordinary instances
688
689 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = VanillaInst monobinds uprags })
690   = let
691         dfun_id    = instanceDFunId ispec
692         rigid_info = InstSkol
693         inst_ty    = idType dfun_id
694         loc        = getSrcSpan dfun_id
695     in
696          -- Prime error recovery
697     recoverM (return emptyLHsBinds)             $
698     setSrcSpan loc                              $
699     addErrCtxt (instDeclCtxt2 (idType dfun_id)) $ do
700
701         -- Instantiate the instance decl with skolem constants
702     (inst_tyvars', dfun_theta', inst_head') <- tcSkolSigType rigid_info inst_ty
703                 -- These inst_tyvars' scope over the 'where' part
704                 -- Those tyvars are inside the dfun_id's type, which is a bit
705                 -- bizarre, but OK so long as you realise it!
706     let
707         (clas, inst_tys') = tcSplitDFunHead inst_head'
708         (class_tyvars, sc_theta, _, op_items) = classBigSig clas
709
710         -- Instantiate the super-class context with inst_tys
711         sc_theta' = substTheta (zipOpenTvSubst class_tyvars inst_tys') sc_theta
712         origin    = SigOrigin rigid_info
713
714          -- Create dictionary Ids from the specified instance contexts.
715     sc_loc      <- getInstLoc InstScOrigin
716     sc_dicts    <- newDictOccs sc_loc sc_theta'         -- These are wanted
717     inst_loc    <- getInstLoc origin
718     dfun_dicts  <- newDictBndrs inst_loc dfun_theta'    -- Includes equalities
719     this_dict   <- newDictBndr inst_loc (mkClassPred clas inst_tys')
720                 -- Default-method Ids may be mentioned in synthesised RHSs,
721                 -- but they'll already be in the environment.
722
723         -- Typecheck the methods
724     let this_dict_id    = instToId this_dict
725         dfun_lam_vars   = map instToVar dfun_dicts      -- Includes equalities
726         prag_fn = mkPragFun uprags 
727         tc_meth = tcInstanceMethod loc clas inst_tyvars'
728                                    dfun_dicts
729                                    dfun_theta' inst_tys'
730                                    this_dict dfun_id
731                                    prag_fn monobinds
732     (meth_exprs, meth_binds) <- tcExtendTyVarEnv inst_tyvars'  $
733                                 mapAndUnzipM tc_meth op_items 
734
735     -- Figure out bindings for the superclass context
736     -- Don't include this_dict in the 'givens', else
737     -- sc_dicts get bound by just selecting  from this_dict!!
738     sc_binds <- addErrCtxt superClassCtxt $
739                 tcSimplifySuperClasses inst_loc this_dict dfun_dicts sc_dicts
740                 -- Note [Recursive superclasses]
741
742         -- It's possible that the superclass stuff might unified something
743         -- in the envt with one of the inst_tyvars'
744     checkSigTyVars inst_tyvars'
745
746     -- Deal with 'SPECIALISE instance' pragmas
747     prags <- tcPrags NonRecursive dfun_id (filter isSpecInstLSig uprags)
748
749     -- Create the result bindings
750     let
751         dict_constr   = classDataCon clas
752         inline_prag | null dfun_dicts  = []
753                     | otherwise        = [L loc (InlinePrag (Inline AlwaysActive True))]
754                 -- Always inline the dfun; this is an experimental decision
755                 -- because it makes a big performance difference sometimes.
756                 -- Often it means we can do the method selection, and then
757                 -- inline the method as well.  Marcin's idea; see comments below.
758                 --
759                 -- BUT: don't inline it if it's a constant dictionary;
760                 -- we'll get all the benefit without inlining, and we get
761                 -- a **lot** of code duplication if we inline it
762                 --
763                 --      See Note [Inline dfuns] below
764
765         sc_dict_vars  = map instToVar sc_dicts
766         dict_bind     = mkVarBind this_dict_id dict_rhs
767         dict_rhs      = foldl (\ f a -> L loc (HsApp f (L loc a))) inst_constr meth_exprs
768         inst_constr   = L loc $ wrapId (mkWpApps sc_dict_vars <.> mkWpTyApps inst_tys')
769                                        (dataConWrapId dict_constr)
770                 -- We don't produce a binding for the dict_constr; instead we
771                 -- rely on the simplifier to unfold this saturated application
772                 -- We do this rather than generate an HsCon directly, because
773                 -- it means that the special cases (e.g. dictionary with only one
774                 -- member) are dealt with by the common MkId.mkDataConWrapId code rather
775                 -- than needing to be repeated here.
776
777         main_bind = noLoc $ AbsBinds
778                             inst_tyvars'
779                             dfun_lam_vars
780                             [(inst_tyvars', dfun_id, this_dict_id, inline_prag ++ prags)]
781                             (dict_bind `consBag` sc_binds)
782
783     showLIE (text "instance")
784     return (main_bind `consBag` unionManyBags meth_binds)
785 \end{code}
786
787 Note [Recursive superclasses]
788 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
789 See Trac #1470 for why we would *like* to add "this_dict" to the 
790 available instances here.  But we can't do so because then the superclases
791 get satisfied by selection from this_dict, and that leads to an immediate
792 loop.  What we need is to add this_dict to Avails without adding its 
793 superclasses, and we currently have no way to do that.
794
795
796 %************************************************************************
797 %*                                                                      *
798       Type-checking an instance method
799 %*                                                                      *
800 %************************************************************************
801
802 tcInstanceMethod
803 - Make the method bindings, as a [(NonRec, HsBinds)], one per method
804 - Remembering to use fresh Name (the instance method Name) as the binder
805 - Bring the instance method Ids into scope, for the benefit of tcInstSig
806 - Use sig_fn mapping instance method Name -> instance tyvars
807 - Ditto prag_fn
808 - Use tcValBinds to do the checking
809
810 \begin{code}
811 tcInstanceMethod :: SrcSpan -> Class -> [TcTyVar] -> [Inst]
812                  -> TcThetaType -> [TcType]
813                  -> Inst -> Id
814                  -> TcPragFun -> LHsBinds Name 
815                  -> (Id, DefMeth)
816                  -> TcM (HsExpr Id, LHsBinds Id)
817         -- The returned inst_meth_ids all have types starting
818         --      forall tvs. theta => ...
819
820 tcInstanceMethod loc clas tyvars dfun_dicts theta inst_tys 
821                  this_dict dfun_id prag_fn binds_in (sel_id, dm_info)
822   = do  { cloned_this <- cloneDict this_dict
823                 -- Need to clone the dict in case it is floated out, and
824                 -- then clashes with its friends
825         ; uniq1 <- newUnique
826         ; let local_meth_name = mkInternalName uniq1 sel_occ loc   -- Same OccName
827               this_dict_bind  = mkVarBind (instToId cloned_this) $ 
828                                 L loc $ wrapId meth_wrapper dfun_id
829               mb_this_bind | null tyvars = Nothing
830                            | otherwise   = Just (cloned_this, this_dict_bind)
831                 -- Only need the this_dict stuff if there are type variables
832                 -- involved; otherwise overlap is not possible
833                 -- See Note [Subtle interaction of recursion and overlap]       
834
835               tc_body rn_bind = do { (meth_id, tc_binds) <- tcInstanceMethodBody 
836                                                 InstSkol clas tyvars dfun_dicts theta inst_tys
837                                                 mb_this_bind sel_id 
838                                                 local_meth_name
839                                                 meth_sig_fn meth_prag_fn rn_bind
840                                    ; return (wrapId meth_wrapper meth_id, tc_binds) }
841
842         ; case (findMethodBind sel_name local_meth_name binds_in, dm_info) of
843                 -- There is a user-supplied method binding, so use it
844             (Just user_bind, _) -> tc_body user_bind
845
846                 -- The user didn't supply a method binding, so we have to make 
847                 -- up a default binding, in a way depending on the default-method info
848
849             (Nothing, GenDefMeth) -> do         -- Derivable type classes stuff
850                         { meth_bind <- mkGenericDefMethBind clas inst_tys sel_id local_meth_name
851                         ; tc_body meth_bind }
852
853             (Nothing, NoDefMeth) -> do          -- No default method in the class
854                         { warn <- doptM Opt_WarnMissingMethods          
855                         ; warnTc (warn  -- Warn only if -fwarn-missing-methods
856                                   && reportIfUnused (getOccName sel_id))
857                                         -- Don't warn about _foo methods
858                                  omitted_meth_warn
859                         ; return (error_rhs, emptyBag) }
860
861             (Nothing, DefMeth) -> do    -- An polymorphic default method
862                         {   -- Build the typechecked version directly, 
863                             -- without calling typecheck_method; 
864                             -- see Note [Default methods in instances]
865                           dm_name <- lookupImportedName (mkDefMethRdrName sel_name)
866                                         -- Might not be imported, but will be an OrigName
867                         ; dm_id   <- tcLookupId dm_name
868                         ; return (wrapId dm_wrapper dm_id, emptyBag) } }
869   where
870     sel_name = idName sel_id
871     sel_occ  = nameOccName sel_name
872     this_dict_id = instToId this_dict
873
874     meth_prag_fn _ = prag_fn sel_name
875     meth_sig_fn _  = Just []    -- The 'Just' says "yes, there's a type sig"
876                         -- But there are no scoped type variables from local_method_id
877                         -- Only the ones from the instance decl itself, which are already
878                         -- in scope.  Example:
879                         --      class C a where { op :: forall b. Eq b => ... }
880                         --      instance C [c] where { op = <rhs> }
881                         -- In <rhs>, 'c' is scope but 'b' is not!
882
883     error_rhs    = HsApp error_fun error_msg
884     error_fun    = L loc $ wrapId (WpTyApp meth_tau) nO_METHOD_BINDING_ERROR_ID
885     error_msg    = L loc (HsLit (HsStringPrim (mkFastString error_string)))
886     meth_tau     = funResultTy (applyTys (idType sel_id) inst_tys)
887     error_string = showSDoc (hcat [ppr loc, text "|", ppr sel_id ])
888
889     dm_wrapper   = WpApp this_dict_id <.> mkWpTyApps inst_tys 
890
891     omitted_meth_warn :: SDoc
892     omitted_meth_warn = ptext (sLit "No explicit method nor default method for")
893                         <+> quotes (ppr sel_id)
894
895     dfun_lam_vars = map instToVar dfun_dicts
896     meth_wrapper = mkWpApps dfun_lam_vars <.> mkWpTyApps (mkTyVarTys tyvars)
897
898
899 wrapId :: HsWrapper -> id -> HsExpr id
900 wrapId wrapper id = mkHsWrap wrapper (HsVar id)
901 \end{code}
902
903 Note [Default methods in instances]
904 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
905 Consider this
906
907    class Baz v x where
908       foo :: x -> x
909       foo y = y
910
911    instance Baz Int Int
912
913 From the class decl we get
914
915    $dmfoo :: forall v x. Baz v x => x -> x
916
917 Notice that the type is ambiguous.  That's fine, though. The instance decl generates
918
919    $dBazIntInt = MkBaz ($dmfoo Int Int $dBazIntInt)
920
921 BUT this does mean we must generate the dictionary translation directly, rather
922 than generating source-code and type-checking it.  That was the bug ing
923 Trac #1061. In any case it's less work to generate the translated version!
924
925
926 %************************************************************************
927 %*                                                                      *
928 \subsection{Error messages}
929 %*                                                                      *
930 %************************************************************************
931
932 \begin{code}
933 instDeclCtxt1 :: LHsType Name -> SDoc
934 instDeclCtxt1 hs_inst_ty
935   = inst_decl_ctxt (case unLoc hs_inst_ty of
936                         HsForAllTy _ _ _ (L _ (HsPredTy pred)) -> ppr pred
937                         HsPredTy pred                    -> ppr pred
938                         _                                -> ppr hs_inst_ty)     -- Don't expect this
939 instDeclCtxt2 :: Type -> SDoc
940 instDeclCtxt2 dfun_ty
941   = inst_decl_ctxt (ppr (mkClassPred cls tys))
942   where
943     (_,_,cls,tys) = tcSplitDFunTy dfun_ty
944
945 inst_decl_ctxt :: SDoc -> SDoc
946 inst_decl_ctxt doc = ptext (sLit "In the instance declaration for") <+> quotes doc
947
948 superClassCtxt :: SDoc
949 superClassCtxt = ptext (sLit "When checking the super-classes of an instance declaration")
950
951 atInstCtxt :: Name -> SDoc
952 atInstCtxt name = ptext (sLit "In the associated type instance for") <+>
953                   quotes (ppr name)
954
955 mustBeVarArgErr :: Type -> SDoc
956 mustBeVarArgErr ty =
957   sep [ ptext (sLit "Arguments that do not correspond to a class parameter") <+>
958         ptext (sLit "must be variables")
959       , ptext (sLit "Instead of a variable, found") <+> ppr ty
960       ]
961
962 wrongATArgErr :: Type -> Type -> SDoc
963 wrongATArgErr ty instTy =
964   sep [ ptext (sLit "Type indexes must match class instance head")
965       , ptext (sLit "Found") <+> ppr ty <+> ptext (sLit "but expected") <+>
966          ppr instTy
967       ]
968 \end{code}