0b4f8b028520291f6638a36698bc094a12ab0a88
[ghc-hetmet.git] / compiler / typecheck / TcInstDcls.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[TcInstDecls]{Typechecking instance declarations}
5
6 \begin{code}
7 module TcInstDcls ( tcInstDecls1, tcInstDecls2 ) where
8
9 #include "HsVersions.h"
10
11 import HsSyn
12 import TcBinds          ( mkPragFun, tcPrags, badBootDeclErr )
13 import TcTyClsDecls     ( tcIdxTyInstDecl )
14 import TcClassDcl       ( tcMethodBind, mkMethodBind, badMethodErr, badATErr,
15                           omittedATWarn, tcClassDecl2, getGenericInstances )
16 import TcRnMonad       
17 import TcMType          ( tcSkolSigType, checkValidInstance,
18                           checkValidInstHead )
19 import TcType           ( TcType, mkClassPred, tcSplitSigmaTy,
20                           tcSplitDFunHead,  SkolemInfo(InstSkol),
21                           tcSplitTyConApp, 
22                           tcSplitDFunTy, mkFunTy ) 
23 import Inst             ( newDictBndr, newDictBndrs, instToId, showLIE, 
24                           getOverlapFlag, tcExtendLocalInstEnv )
25 import InstEnv          ( mkLocalInstance, instanceDFunId )
26 import FamInst          ( tcExtendLocalFamInstEnv )
27 import FamInstEnv       ( mkLocalFamInst )
28 import TcDeriv          ( tcDeriving )
29 import TcEnv            ( InstInfo(..), InstBindings(..), 
30                           newDFunName, tcExtendIdEnv, tcExtendGlobalEnv
31                         )
32 import TcHsType         ( kcHsSigType, tcHsKindedType )
33 import TcUnify          ( checkSigTyVars )
34 import TcSimplify       ( tcSimplifySuperClasses )
35 import Type             ( zipOpenTvSubst, substTheta, mkTyConApp, mkTyVarTy,
36                           TyThing(ATyCon), isTyVarTy, tcEqType,
37                           substTys, emptyTvSubst, extendTvSubst )
38 import Coercion         ( mkSymCoercion )
39 import TyCon            ( TyCon, tyConName, newTyConCo_maybe, tyConTyVars,
40                           isTyConAssoc, tyConFamInst_maybe, tyConDataCons,
41                           assocTyConArgPoss_maybe )
42 import DataCon          ( classDataCon, dataConInstArgTys )
43 import Class            ( Class, classTyCon, classBigSig, classATs )
44 import Var              ( TyVar, Id, idName, idType, tyVarName )
45 import MkId             ( mkDictFunId )
46 import Name             ( Name, getSrcLoc, nameOccName )
47 import NameSet          ( addListToNameSet, emptyNameSet, minusNameSet,
48                           nameSetToList ) 
49 import Maybe            ( fromJust, catMaybes )
50 import Monad            ( when )
51 import List             ( find )
52 import DynFlags         ( DynFlag(Opt_WarnMissingMethods) )
53 import SrcLoc           ( srcLocSpan, unLoc, noLoc, Located(..), srcSpanStart,
54                           getLoc)
55 import ListSetOps       ( minusList )
56 import Util             ( snocView, dropList )
57 import Outputable
58 import Bag
59 import BasicTypes       ( Activation( AlwaysActive ), InlineSpec(..) )
60 import HscTypes         ( implicitTyThings )
61 import FastString
62 \end{code}
63
64 Typechecking instance declarations is done in two passes. The first
65 pass, made by @tcInstDecls1@, collects information to be used in the
66 second pass.
67
68 This pre-processed info includes the as-yet-unprocessed bindings
69 inside the instance declaration.  These are type-checked in the second
70 pass, when the class-instance envs and GVE contain all the info from
71 all the instance and value decls.  Indeed that's the reason we need
72 two passes over the instance decls.
73
74 Here is the overall algorithm.
75 Assume that we have an instance declaration
76
77     instance c => k (t tvs) where b
78
79 \begin{enumerate}
80 \item
81 $LIE_c$ is the LIE for the context of class $c$
82 \item
83 $betas_bar$ is the free variables in the class method type, excluding the
84    class variable
85 \item
86 $LIE_cop$ is the LIE constraining a particular class method
87 \item
88 $tau_cop$ is the tau type of a class method
89 \item
90 $LIE_i$ is the LIE for the context of instance $i$
91 \item
92 $X$ is the instance constructor tycon
93 \item
94 $gammas_bar$ is the set of type variables of the instance
95 \item
96 $LIE_iop$ is the LIE for a particular class method instance
97 \item
98 $tau_iop$ is the tau type for this instance of a class method
99 \item
100 $alpha$ is the class variable
101 \item
102 $LIE_cop' = LIE_cop [X gammas_bar / alpha, fresh betas_bar]$
103 \item
104 $tau_cop' = tau_cop [X gammas_bar / alpha, fresh betas_bar]$
105 \end{enumerate}
106
107 ToDo: Update the list above with names actually in the code.
108
109 \begin{enumerate}
110 \item
111 First, make the LIEs for the class and instance contexts, which means
112 instantiate $thetaC [X inst_tyvars / alpha ]$, yielding LIElistC' and LIEC',
113 and make LIElistI and LIEI.
114 \item
115 Then process each method in turn.
116 \item
117 order the instance methods according to the ordering of the class methods
118 \item
119 express LIEC' in terms of LIEI, yielding $dbinds_super$ or an error
120 \item
121 Create final dictionary function from bindings generated already
122 \begin{pseudocode}
123 df = lambda inst_tyvars
124        lambda LIEI
125          let Bop1
126              Bop2
127              ...
128              Bopn
129          and dbinds_super
130               in <op1,op2,...,opn,sd1,...,sdm>
131 \end{pseudocode}
132 Here, Bop1 \ldots Bopn bind the methods op1 \ldots opn,
133 and $dbinds_super$ bind the superclass dictionaries sd1 \ldots sdm.
134 \end{enumerate}
135
136
137 %************************************************************************
138 %*                                                                      *
139 \subsection{Extracting instance decls}
140 %*                                                                      *
141 %************************************************************************
142
143 Gather up the instance declarations from their various sources
144
145 \begin{code}
146 tcInstDecls1    -- Deal with both source-code and imported instance decls
147    :: [LTyClDecl Name]          -- For deriving stuff
148    -> [LInstDecl Name]          -- Source code instance decls
149    -> [LDerivDecl Name]         -- Source code stand-alone deriving decls
150    -> TcM (TcGblEnv,            -- The full inst env
151            [InstInfo],          -- Source-code instance decls to process; 
152                                 -- contains all dfuns for this module
153            HsValBinds Name)     -- Supporting bindings for derived instances
154
155 tcInstDecls1 tycl_decls inst_decls deriv_decls
156   = checkNoErrs $
157     do {        -- Stop if addInstInfos etc discovers any errors
158                 -- (they recover, so that we get more than one error each
159                 -- round) 
160
161                 -- (1) Do class instance declarations and instances of indexed
162                 --     types 
163        ; let { idxty_decls = filter (isIdxTyDecl . unLoc) tycl_decls }
164        ; local_info_tycons <- mappM tcLocalInstDecl1  inst_decls
165        ; idx_tycons        <- mappM tcIdxTyInstDeclTL idxty_decls
166
167        ; let { (local_infos,
168                 at_tycons)     = unzip local_info_tycons
169              ; local_info      = concat local_infos
170              ; at_idx_tycon    = concat at_tycons ++ catMaybes idx_tycons
171              ; clas_decls      = filter (isClassDecl.unLoc) tycl_decls 
172              ; implicit_things = concatMap implicitTyThings at_idx_tycon
173              }
174
175                 -- (2) Add the tycons of indexed types and their implicit
176                 --     tythings to the global environment
177        ; tcExtendGlobalEnv (at_idx_tycon ++ implicit_things) $ do {
178
179                 -- (3) Instances from generic class declarations
180        ; generic_inst_info <- getGenericInstances clas_decls
181
182                 -- Next, construct the instance environment so far, consisting
183                 -- of 
184                 --   a) local instance decls
185                 --   b) generic instances
186                 --   c) local family instance decls
187        ; addInsts local_info         $ do {
188        ; addInsts generic_inst_info  $ do {
189        ; addFamInsts at_idx_tycon    $ do {
190
191                 -- (4) Compute instances from "deriving" clauses; 
192                 -- This stuff computes a context for the derived instance
193                 -- decl, so it needs to know about all the instances possible
194        ; (deriv_inst_info, deriv_binds) <- tcDeriving tycl_decls deriv_decls
195        ; addInsts deriv_inst_info   $ do {
196
197        ; gbl_env <- getGblEnv
198        ; returnM (gbl_env, 
199                   generic_inst_info ++ deriv_inst_info ++ local_info,
200                   deriv_binds) 
201     }}}}}}
202   where
203     -- Make sure that toplevel type instance are not for associated types.
204     -- !!!TODO: Need to perform this check for the TyThing of type functions,
205     --          too.
206     tcIdxTyInstDeclTL ldecl@(L loc decl) =
207       do { tything <- tcIdxTyInstDecl ldecl
208          ; setSrcSpan loc $
209              when (isAssocFamily tything) $
210                addErr $ assocInClassErr (tcdName decl)
211          ; return tything
212          }
213     isAssocFamily (Just (ATyCon tycon)) =
214       case tyConFamInst_maybe tycon of
215         Nothing       -> panic "isAssocFamily: no family?!?"
216         Just (fam, _) -> isTyConAssoc fam
217     isAssocFamily (Just _             ) = panic "isAssocFamily: no tycon?!?"
218     isAssocFamily Nothing               = False
219
220 assocInClassErr name = 
221   ptext SLIT("Associated type") <+> quotes (ppr name) <+> 
222   ptext SLIT("must be inside a class instance")
223
224 addInsts :: [InstInfo] -> TcM a -> TcM a
225 addInsts infos thing_inside
226   = tcExtendLocalInstEnv (map iSpec infos) thing_inside
227
228 addFamInsts :: [TyThing] -> TcM a -> TcM a
229 addFamInsts tycons thing_inside
230   = tcExtendLocalFamInstEnv (map mkLocalFamInstTyThing tycons) thing_inside
231   where
232     mkLocalFamInstTyThing (ATyCon tycon) = mkLocalFamInst tycon
233     mkLocalFamInstTyThing tything        = pprPanic "TcInstDcls.addFamInsts"
234                                                     (ppr tything)
235 \end{code} 
236
237 \begin{code}
238 tcLocalInstDecl1 :: LInstDecl Name 
239                  -> TcM ([InstInfo], [TyThing]) -- [] if there was an error
240         -- A source-file instance declaration
241         -- Type-check all the stuff before the "where"
242         --
243         -- We check for respectable instance type, and context
244 tcLocalInstDecl1 decl@(L loc (InstDecl poly_ty binds uprags ats))
245   =     -- Prime error recovery, set source location
246     recoverM (returnM ([], []))         $
247     setSrcSpan loc                      $
248     addErrCtxt (instDeclCtxt1 poly_ty)  $
249
250     do  { is_boot <- tcIsHsBoot
251         ; checkTc (not is_boot || (isEmptyLHsBinds binds && null uprags))
252                   badBootDeclErr
253
254         -- Typecheck the instance type itself.  We can't use 
255         -- tcHsSigType, because it's not a valid user type.
256         ; kinded_ty <- kcHsSigType poly_ty
257         ; poly_ty'  <- tcHsKindedType kinded_ty
258         ; let (tyvars, theta, tau) = tcSplitSigmaTy poly_ty'
259         
260         -- Next, process any associated types.
261         ; idx_tycons <- mappM tcIdxTyInstDecl ats
262
263         -- Now, check the validity of the instance.
264         ; (clas, inst_tys) <- checkValidInstHead tau
265         ; checkValidInstance tyvars theta clas inst_tys
266         ; checkValidAndMissingATs clas (tyvars, inst_tys) 
267                                   (zip ats idx_tycons)
268
269         -- Finally, construct the Core representation of the instance.
270         -- (This no longer includes the associated types.)
271         ; dfun_name <- newDFunName clas inst_tys (srcSpanStart loc)
272         ; overlap_flag <- getOverlapFlag
273         ; let dfun           = mkDictFunId dfun_name tyvars theta clas inst_tys
274               ispec          = mkLocalInstance dfun overlap_flag
275
276         ; return ([InstInfo { iSpec  = ispec, 
277                               iBinds = VanillaInst binds uprags }],
278                   catMaybes idx_tycons)
279         }
280   where
281     -- We pass in the source form and the type checked form of the ATs.  We
282     -- really need the source form only to be able to produce more informative
283     -- error messages.
284     checkValidAndMissingATs :: Class
285                             -> ([TyVar], [TcType])     -- instance types
286                             -> [(LTyClDecl Name,       -- source form of AT
287                                  Maybe TyThing)]       -- Core form of AT
288                             -> TcM ()
289     checkValidAndMissingATs clas inst_tys ats
290       = do { -- Issue a warning for each class AT that is not defined in this
291              -- instance.
292            ; let classDefATs = listToNameSet . map tyConName . classATs $ clas
293                  definedATs  = listToNameSet . map (tcdName.unLoc.fst)  $ ats
294                  omitted     = classDefATs `minusNameSet` definedATs
295            ; warn <- doptM Opt_WarnMissingMethods
296            ; mapM_ (warnTc warn . omittedATWarn) (nameSetToList omitted)
297            
298              -- Ensure that all AT indexes that correspond to class parameters
299              -- coincide with the types in the instance head.  All remaining
300              -- AT arguments must be variables.  Also raise an error for any
301              -- type instances that are not associated with this class.
302            ; mapM_ (checkIndexes clas inst_tys) ats
303            }
304
305     checkIndexes _    _        (hsAT, Nothing)             = 
306       return ()    -- skip, we already had an error here
307     checkIndexes clas inst_tys (hsAT, Just (ATyCon tycon)) = 
308 -- !!!TODO: check that this does the Right Thing for indexed synonyms, too!
309       checkIndexes' clas inst_tys hsAT 
310                     (tyConTyVars tycon, 
311                      snd . fromJust . tyConFamInst_maybe $ tycon)
312     checkIndexes _ _ _ = panic "checkIndexes"
313
314     checkIndexes' clas (instTvs, instTys) hsAT (atTvs, atTys)
315       = let atName = tcdName . unLoc $ hsAT
316         in
317         setSrcSpan (getLoc hsAT)       $
318         addErrCtxt (atInstCtxt atName) $
319         case find ((atName ==) . tyConName) (classATs clas) of
320           Nothing     -> addErrTc $ badATErr clas atName  -- not in this class
321           Just atDecl -> 
322             case assocTyConArgPoss_maybe atDecl of
323               Nothing   -> panic "checkIndexes': AT has no args poss?!?"
324               Just poss -> 
325
326                 -- The following is tricky!  We need to deal with three
327                 -- complications: (1) The AT possibly only uses a subset of
328                 -- the class parameters as indexes and those it uses may be in
329                 -- a different order; (2) the AT may have extra arguments,
330                 -- which must be type variables; and (3) variables in AT and
331                 -- instance head will be different `Name's even if their
332                 -- source lexemes are identical.
333                 --
334                 -- Re (1), `poss' contains a permutation vector to extract the
335                 -- class parameters in the right order.
336                 --
337                 -- Re (2), we wrap the (permuted) class parameters in a Maybe
338                 -- type and use Nothing for any extra AT arguments.  (First
339                 -- equation of `checkIndex' below.)
340                 --
341                 -- Re (3), we replace any type variable in the AT parameters
342                 -- that has the same source lexeme as some variable in the
343                 -- instance types with the instance type variable sharing its
344                 -- source lexeme.
345                 --
346                 let relevantInstTys = map (instTys !!) poss
347                     instArgs        = map Just relevantInstTys ++ 
348                                       repeat Nothing  -- extra arguments
349                     renaming        = substSameTyVar atTvs instTvs
350                 in
351                 zipWithM_ checkIndex (substTys renaming atTys) instArgs
352
353     checkIndex ty Nothing 
354       | isTyVarTy ty         = return ()
355       | otherwise            = addErrTc $ mustBeVarArgErr ty
356     checkIndex ty (Just instTy) 
357       | ty `tcEqType` instTy = return ()
358       | otherwise            = addErrTc $ wrongATArgErr ty instTy
359
360     listToNameSet = addListToNameSet emptyNameSet 
361
362     substSameTyVar []       _            = emptyTvSubst
363     substSameTyVar (tv:tvs) replacingTvs = 
364       let replacement = case find (tv `sameLexeme`) replacingTvs of
365                           Nothing  -> mkTyVarTy tv
366                           Just rtv -> mkTyVarTy rtv
367           --
368           tv1 `sameLexeme` tv2 = 
369             nameOccName (tyVarName tv1) == nameOccName (tyVarName tv2)
370       in
371       extendTvSubst (substSameTyVar tvs replacingTvs) tv replacement
372 \end{code}
373
374
375 %************************************************************************
376 %*                                                                      *
377 \subsection{Type-checking instance declarations, pass 2}
378 %*                                                                      *
379 %************************************************************************
380
381 \begin{code}
382 tcInstDecls2 :: [LTyClDecl Name] -> [InstInfo] 
383              -> TcM (LHsBinds Id, TcLclEnv)
384 -- (a) From each class declaration, 
385 --      generate any default-method bindings
386 -- (b) From each instance decl
387 --      generate the dfun binding
388
389 tcInstDecls2 tycl_decls inst_decls
390   = do  {       -- (a) Default methods from class decls
391           (dm_binds_s, dm_ids_s) <- mapAndUnzipM tcClassDecl2 $
392                                     filter (isClassDecl.unLoc) tycl_decls
393         ; tcExtendIdEnv (concat dm_ids_s)       $ do 
394     
395                 -- (b) instance declarations
396         ; inst_binds_s <- mappM tcInstDecl2 inst_decls
397
398                 -- Done
399         ; let binds = unionManyBags dm_binds_s `unionBags` 
400                       unionManyBags inst_binds_s
401         ; tcl_env <- getLclEnv          -- Default method Ids in here
402         ; returnM (binds, tcl_env) }
403 \end{code}
404
405 ======= New documentation starts here (Sept 92)  ==============
406
407 The main purpose of @tcInstDecl2@ is to return a @HsBinds@ which defines
408 the dictionary function for this instance declaration.  For example
409 \begin{verbatim}
410         instance Foo a => Foo [a] where
411                 op1 x = ...
412                 op2 y = ...
413 \end{verbatim}
414 might generate something like
415 \begin{verbatim}
416         dfun.Foo.List dFoo_a = let op1 x = ...
417                                    op2 y = ...
418                                in
419                                    Dict [op1, op2]
420 \end{verbatim}
421
422 HOWEVER, if the instance decl has no context, then it returns a
423 bigger @HsBinds@ with declarations for each method.  For example
424 \begin{verbatim}
425         instance Foo [a] where
426                 op1 x = ...
427                 op2 y = ...
428 \end{verbatim}
429 might produce
430 \begin{verbatim}
431         dfun.Foo.List a = Dict [Foo.op1.List a, Foo.op2.List a]
432         const.Foo.op1.List a x = ...
433         const.Foo.op2.List a y = ...
434 \end{verbatim}
435 This group may be mutually recursive, because (for example) there may
436 be no method supplied for op2 in which case we'll get
437 \begin{verbatim}
438         const.Foo.op2.List a = default.Foo.op2 (dfun.Foo.List a)
439 \end{verbatim}
440 that is, the default method applied to the dictionary at this type.
441
442 What we actually produce in either case is:
443
444         AbsBinds [a] [dfun_theta_dicts]
445                  [(dfun.Foo.List, d)] ++ (maybe) [(const.Foo.op1.List, op1), ...]
446                  { d = (sd1,sd2, ..., op1, op2, ...)
447                    op1 = ...
448                    op2 = ...
449                  }
450
451 The "maybe" says that we only ask AbsBinds to make global constant methods
452 if the dfun_theta is empty.
453
454                 
455 For an instance declaration, say,
456
457         instance (C1 a, C2 b) => C (T a b) where
458                 ...
459
460 where the {\em immediate} superclasses of C are D1, D2, we build a dictionary
461 function whose type is
462
463         (C1 a, C2 b, D1 (T a b), D2 (T a b)) => C (T a b)
464
465 Notice that we pass it the superclass dictionaries at the instance type; this
466 is the ``Mark Jones optimisation''.  The stuff before the "=>" here
467 is the @dfun_theta@ below.
468
469 First comes the easy case of a non-local instance decl.
470
471
472 \begin{code}
473 tcInstDecl2 :: InstInfo -> TcM (LHsBinds Id)
474 -- Returns a binding for the dfun
475
476 ------------------------
477 -- Derived newtype instances; surprisingly tricky!
478 --
479 -- In the case of a newtype, things are rather easy
480 --      class Show a => Foo a b where ...
481 --      newtype T a = MkT (Tree [a]) deriving( Foo Int )
482 -- The newtype gives an FC axiom looking like
483 --      axiom CoT a ::  T a :=: Tree [a]
484 --   (see Note [Newtype coercions] in TyCon for this unusual form of axiom)
485 --
486 -- So all need is to generate a binding looking like: 
487 --      dfunFooT :: forall a. (Foo Int (Tree [a], Show (T a)) => Foo Int (T a)
488 --      dfunFooT = /\a. \(ds:Show (T a)) (df:Foo (Tree [a])).
489 --                case df `cast` (Foo Int (sym (CoT a))) of
490 --                   Foo _ op1 .. opn -> Foo ds op1 .. opn
491 --
492 -- If there are no superclasses, matters are simpler, because we don't need the case
493 -- see Note [Newtype deriving superclasses] in TcDeriv.lhs
494
495 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = NewTypeDerived mb_preds })
496   = do  { let dfun_id      = instanceDFunId ispec 
497               rigid_info   = InstSkol dfun_id
498               origin       = SigOrigin rigid_info
499               inst_ty      = idType dfun_id
500         ; (tvs, theta, inst_head_ty) <- tcSkolSigType rigid_info inst_ty
501                 -- inst_head_ty is a PredType
502
503         ; inst_loc <- getInstLoc origin
504         ; (rep_dict_id : sc_dict_ids, wrap_fn, sc_binds)
505                 <- make_wrapper inst_loc tvs theta mb_preds
506                 -- Here, we are relying on the order of dictionary 
507                 -- arguments built by NewTypeDerived in TcDeriv; 
508                 -- namely, that the rep_dict_id comes first
509            
510         ; let (cls, cls_inst_tys) = tcSplitDFunHead inst_head_ty
511               cls_tycon           = classTyCon cls
512               the_coercion        = make_coercion cls_tycon cls_inst_tys
513               coerced_rep_dict    = mkHsWrap the_coercion (HsVar rep_dict_id)
514
515         ; body <- make_body cls_tycon cls_inst_tys sc_dict_ids coerced_rep_dict
516               
517         ; return (sc_binds `snocBag` (noLoc $ VarBind dfun_id $ noLoc $ mkHsWrap wrap_fn body)) }
518   where
519
520       -----------------------
521       --        make_wrapper
522       -- We distinguish two cases:
523       -- (a) there is no tyvar abstraction in the dfun, so all dicts are constant,
524       --     and the new dict can just be a constant
525       --        (mb_preds = Just preds)
526       -- (b) there are tyvars, so we must make a dict *fun*
527       --        (mb_preds = Nothing)
528       -- See the defn of NewTypeDerived for the meaning of mb_preds
529     make_wrapper inst_loc tvs theta (Just preds)        -- Case (a)
530       = ASSERT( null tvs && null theta )
531         do { dicts <- newDictBndrs inst_loc preds
532            ; sc_binds <- addErrCtxt superClassCtxt (tcSimplifySuperClasses [] [] dicts)
533                 -- Use tcSimplifySuperClasses to avoid creating loops, for the
534                 -- same reason as Note [SUPERCLASS-LOOP 1] in TcSimplify
535            ; return (map instToId dicts, idHsWrapper, sc_binds) }
536
537     make_wrapper inst_loc tvs theta Nothing     -- Case (b)
538       = do { dicts <- newDictBndrs inst_loc theta
539            ; let dict_ids = map instToId dicts
540            ; return (dict_ids, mkWpTyLams tvs <.> mkWpLams dict_ids, emptyBag) }
541
542       -----------------------
543       --        make_coercion
544       -- The inst_head looks like (C s1 .. sm (T a1 .. ak))
545       -- But we want the coercion (C s1 .. sm (sym (CoT a1 .. ak)))
546       --        with kind (C s1 .. sm (T a1 .. ak)  :=:  C s1 .. sm <rep_ty>)
547       --        where rep_ty is the (eta-reduced) type rep of T
548       -- So we just replace T with CoT, and insert a 'sym'
549       -- NB: we know that k will be >= arity of CoT, because the latter fully eta-reduced
550
551     make_coercion cls_tycon cls_inst_tys
552         | Just (all_tys_but_last, last_ty) <- snocView cls_inst_tys
553         , (tycon, tc_args) <- tcSplitTyConApp last_ty   -- Should not fail
554         , Just co_con <- newTyConCo_maybe tycon
555         , let co = mkSymCoercion (mkTyConApp co_con tc_args)
556         = WpCo (mkTyConApp cls_tycon (all_tys_but_last ++ [co]))
557         | otherwise     -- The newtype is transparent; no need for a cast
558         = idHsWrapper
559
560       -----------------------
561       --        make_body
562       -- Two cases; see Note [Newtype deriving superclasses] in TcDeriv.lhs
563       -- (a) no superclasses; then we can just use the coerced dict
564       -- (b) one or more superclasses; then new need to do the unpack/repack
565         
566     make_body cls_tycon cls_inst_tys sc_dict_ids coerced_rep_dict
567         | null sc_dict_ids              -- Case (a)
568         = return coerced_rep_dict
569         | otherwise                     -- Case (b)
570         = do { op_ids            <- newSysLocalIds FSLIT("op") op_tys
571              ; dummy_sc_dict_ids <- newSysLocalIds FSLIT("sc") (map idType sc_dict_ids)
572              ; let the_pat = ConPatOut { pat_con = noLoc cls_data_con, pat_tvs = [],
573                                          pat_dicts = dummy_sc_dict_ids,
574                                          pat_binds = emptyLHsBinds,
575                                          pat_args = PrefixCon (map nlVarPat op_ids),
576                                          pat_ty = pat_ty} 
577                    the_match = mkSimpleMatch [noLoc the_pat] the_rhs
578                    the_rhs = mkHsConApp cls_data_con cls_inst_tys $
579                              map HsVar (sc_dict_ids ++ op_ids)
580
581                 -- Warning: this HsCase scrutinises a value with a PredTy, which is
582                 --          never otherwise seen in Haskell source code. It'd be
583                 --          nicer to generate Core directly!
584              ; return (HsCase (noLoc coerced_rep_dict) $
585                        MatchGroup [the_match] (mkFunTy pat_ty pat_ty)) }
586         where
587           pat_ty       = mkTyConApp cls_tycon cls_inst_tys
588           cls_data_con = head (tyConDataCons cls_tycon)
589           cls_arg_tys  = dataConInstArgTys cls_data_con cls_inst_tys 
590           op_tys       = dropList sc_dict_ids cls_arg_tys
591
592 ------------------------
593 -- Ordinary instances
594
595 tcInstDecl2 (InstInfo { iSpec = ispec, iBinds = VanillaInst monobinds uprags })
596   = let 
597         dfun_id    = instanceDFunId ispec
598         rigid_info = InstSkol dfun_id
599         inst_ty    = idType dfun_id
600     in
601          -- Prime error recovery
602     recoverM (returnM emptyLHsBinds)            $
603     setSrcSpan (srcLocSpan (getSrcLoc dfun_id)) $
604     addErrCtxt (instDeclCtxt2 (idType dfun_id)) $
605
606         -- Instantiate the instance decl with skolem constants 
607     tcSkolSigType rigid_info inst_ty    `thenM` \ (inst_tyvars', dfun_theta', inst_head') ->
608                 -- These inst_tyvars' scope over the 'where' part
609                 -- Those tyvars are inside the dfun_id's type, which is a bit
610                 -- bizarre, but OK so long as you realise it!
611     let
612         (clas, inst_tys') = tcSplitDFunHead inst_head'
613         (class_tyvars, sc_theta, _, op_items) = classBigSig clas
614
615         -- Instantiate the super-class context with inst_tys
616         sc_theta' = substTheta (zipOpenTvSubst class_tyvars inst_tys') sc_theta
617         origin    = SigOrigin rigid_info
618     in
619          -- Create dictionary Ids from the specified instance contexts.
620     getInstLoc InstScOrigin                             `thenM` \ sc_loc -> 
621     newDictBndrs sc_loc sc_theta'                       `thenM` \ sc_dicts ->
622     getInstLoc origin                                   `thenM` \ inst_loc -> 
623     newDictBndrs inst_loc dfun_theta'                   `thenM` \ dfun_arg_dicts ->
624     newDictBndr inst_loc (mkClassPred clas inst_tys')   `thenM` \ this_dict ->
625                 -- Default-method Ids may be mentioned in synthesised RHSs,
626                 -- but they'll already be in the environment.
627
628         -- Typecheck the methods
629     let         -- These insts are in scope; quite a few, eh?
630         avail_insts = [this_dict] ++ dfun_arg_dicts ++ sc_dicts
631     in
632     tcMethods origin clas inst_tyvars' 
633               dfun_theta' inst_tys' avail_insts 
634               op_items monobinds uprags         `thenM` \ (meth_ids, meth_binds) ->
635
636         -- Figure out bindings for the superclass context
637         -- Don't include this_dict in the 'givens', else
638         -- sc_dicts get bound by just selecting  from this_dict!!
639     addErrCtxt superClassCtxt
640         (tcSimplifySuperClasses inst_tyvars'
641                          dfun_arg_dicts
642                          sc_dicts)      `thenM` \ sc_binds ->
643
644         -- It's possible that the superclass stuff might unified one
645         -- of the inst_tyavars' with something in the envt
646     checkSigTyVars inst_tyvars'         `thenM_`
647
648         -- Deal with 'SPECIALISE instance' pragmas 
649     tcPrags dfun_id (filter isSpecInstLSig uprags)      `thenM` \ prags -> 
650     
651         -- Create the result bindings
652     let
653         dict_constr   = classDataCon clas
654         scs_and_meths = map instToId sc_dicts ++ meth_ids
655         this_dict_id  = instToId this_dict
656         inline_prag | null dfun_arg_dicts = []
657                     | otherwise = [InlinePrag (Inline AlwaysActive True)]
658                 -- Always inline the dfun; this is an experimental decision
659                 -- because it makes a big performance difference sometimes.
660                 -- Often it means we can do the method selection, and then
661                 -- inline the method as well.  Marcin's idea; see comments below.
662                 --
663                 -- BUT: don't inline it if it's a constant dictionary;
664                 -- we'll get all the benefit without inlining, and we get
665                 -- a **lot** of code duplication if we inline it
666                 --
667                 --      See Note [Inline dfuns] below
668
669         dict_rhs
670           = mkHsConApp dict_constr inst_tys' (map HsVar scs_and_meths)
671                 -- We don't produce a binding for the dict_constr; instead we
672                 -- rely on the simplifier to unfold this saturated application
673                 -- We do this rather than generate an HsCon directly, because
674                 -- it means that the special cases (e.g. dictionary with only one
675                 -- member) are dealt with by the common MkId.mkDataConWrapId code rather
676                 -- than needing to be repeated here.
677
678         dict_bind  = noLoc (VarBind this_dict_id dict_rhs)
679         all_binds  = dict_bind `consBag` (sc_binds `unionBags` meth_binds)
680
681         main_bind = noLoc $ AbsBinds
682                             inst_tyvars'
683                             (map instToId dfun_arg_dicts)
684                             [(inst_tyvars', dfun_id, this_dict_id, 
685                                             inline_prag ++ prags)] 
686                             all_binds
687     in
688     showLIE (text "instance")           `thenM_`
689     returnM (unitBag main_bind)
690
691
692 tcMethods origin clas inst_tyvars' dfun_theta' inst_tys' 
693           avail_insts op_items monobinds uprags
694   =     -- Check that all the method bindings come from this class
695     let
696         sel_names = [idName sel_id | (sel_id, _) <- op_items]
697         bad_bndrs = collectHsBindBinders monobinds `minusList` sel_names
698     in
699     mappM (addErrTc . badMethodErr clas) bad_bndrs      `thenM_`
700
701         -- Make the method bindings
702     let
703         mk_method_bind = mkMethodBind origin clas inst_tys' monobinds
704     in
705     mapAndUnzipM mk_method_bind op_items        `thenM` \ (meth_insts, meth_infos) ->
706
707         -- And type check them
708         -- It's really worth making meth_insts available to the tcMethodBind
709         -- Consider     instance Monad (ST s) where
710         --                {-# INLINE (>>) #-}
711         --                (>>) = ...(>>=)...
712         -- If we don't include meth_insts, we end up with bindings like this:
713         --      rec { dict = MkD then bind ...
714         --            then = inline_me (... (GHC.Base.>>= dict) ...)
715         --            bind = ... }
716         -- The trouble is that (a) 'then' and 'dict' are mutually recursive, 
717         -- and (b) the inline_me prevents us inlining the >>= selector, which
718         -- would unravel the loop.  Result: (>>) ends up as a loop breaker, and
719         -- is not inlined across modules. Rather ironic since this does not
720         -- happen without the INLINE pragma!  
721         --
722         -- Solution: make meth_insts available, so that 'then' refers directly
723         --           to the local 'bind' rather than going via the dictionary.
724         --
725         -- BUT WATCH OUT!  If the method type mentions the class variable, then
726         -- this optimisation is not right.  Consider
727         --      class C a where
728         --        op :: Eq a => a
729         --
730         --      instance C Int where
731         --        op = op
732         -- The occurrence of 'op' on the rhs gives rise to a constraint
733         --      op at Int
734         -- The trouble is that the 'meth_inst' for op, which is 'available', also
735         -- looks like 'op at Int'.  But they are not the same.
736     let
737         prag_fn        = mkPragFun uprags
738         all_insts      = avail_insts ++ catMaybes meth_insts
739         sig_fn n       = Just []        -- No scoped type variables, but every method has
740                                         -- a type signature, in effect, so that we check
741                                         -- the method has the right type
742         tc_method_bind = tcMethodBind inst_tyvars' dfun_theta' all_insts sig_fn prag_fn
743         meth_ids       = [meth_id | (_,meth_id,_) <- meth_infos]
744     in
745
746     mapM tc_method_bind meth_infos              `thenM` \ meth_binds_s ->
747    
748     returnM (meth_ids, unionManyBags meth_binds_s)
749 \end{code}
750
751
752                 ------------------------------
753         [Inline dfuns] Inlining dfuns unconditionally
754                 ------------------------------
755
756 The code above unconditionally inlines dict funs.  Here's why.
757 Consider this program:
758
759     test :: Int -> Int -> Bool
760     test x y = (x,y) == (y,x) || test y x
761     -- Recursive to avoid making it inline.
762
763 This needs the (Eq (Int,Int)) instance.  If we inline that dfun
764 the code we end up with is good:
765
766     Test.$wtest =
767         \r -> case ==# [ww ww1] of wild {
768                 PrelBase.False -> Test.$wtest ww1 ww;
769                 PrelBase.True ->
770                   case ==# [ww1 ww] of wild1 {
771                     PrelBase.False -> Test.$wtest ww1 ww;
772                     PrelBase.True -> PrelBase.True [];
773                   };
774             };
775     Test.test = \r [w w1]
776             case w of w2 {
777               PrelBase.I# ww ->
778                   case w1 of w3 { PrelBase.I# ww1 -> Test.$wtest ww ww1; };
779             };
780
781 If we don't inline the dfun, the code is not nearly as good:
782
783     (==) = case PrelTup.$fEq(,) PrelBase.$fEqInt PrelBase.$fEqInt of tpl {
784               PrelBase.:DEq tpl1 tpl2 -> tpl2;
785             };
786     
787     Test.$wtest =
788         \r [ww ww1]
789             let { y = PrelBase.I#! [ww1]; } in
790             let { x = PrelBase.I#! [ww]; } in
791             let { sat_slx = PrelTup.(,)! [y x]; } in
792             let { sat_sly = PrelTup.(,)! [x y];
793             } in
794               case == sat_sly sat_slx of wild {
795                 PrelBase.False -> Test.$wtest ww1 ww;
796                 PrelBase.True -> PrelBase.True [];
797               };
798     
799     Test.test =
800         \r [w w1]
801             case w of w2 {
802               PrelBase.I# ww ->
803                   case w1 of w3 { PrelBase.I# ww1 -> Test.$wtest ww ww1; };
804             };
805
806 Why doesn't GHC inline $fEq?  Because it looks big:
807
808     PrelTup.zdfEqZ1T{-rcX-}
809         = \ @ a{-reT-} :: * @ b{-reS-} :: *
810             zddEq{-rf6-} _Ks :: {PrelBase.Eq{-23-} a{-reT-}}
811             zddEq1{-rf7-} _Ks :: {PrelBase.Eq{-23-} b{-reS-}} ->
812             let {
813               zeze{-rf0-} _Kl :: (b{-reS-} -> b{-reS-} -> PrelBase.Bool{-3c-})
814               zeze{-rf0-} = PrelBase.zeze{-01L-}@ b{-reS-} zddEq1{-rf7-} } in
815             let {
816               zeze1{-rf3-} _Kl :: (a{-reT-} -> a{-reT-} -> PrelBase.Bool{-3c-})
817               zeze1{-rf3-} = PrelBase.zeze{-01L-} @ a{-reT-} zddEq{-rf6-} } in
818             let {
819               zeze2{-reN-} :: ((a{-reT-}, b{-reS-}) -> (a{-reT-}, b{-reS-})-> PrelBase.Bool{-3c-})
820               zeze2{-reN-} = \ ds{-rf5-} _Ks :: (a{-reT-}, b{-reS-})
821                                ds1{-rf4-} _Ks :: (a{-reT-}, b{-reS-}) ->
822                              case ds{-rf5-}
823                              of wild{-reW-} _Kd { (a1{-rf2-} _Ks, a2{-reZ-} _Ks) ->
824                              case ds1{-rf4-}
825                              of wild1{-reX-} _Kd { (b1{-rf1-} _Ks, b2{-reY-} _Ks) ->
826                              PrelBase.zaza{-r4e-}
827                                (zeze1{-rf3-} a1{-rf2-} b1{-rf1-})
828                                (zeze{-rf0-} a2{-reZ-} b2{-reY-})
829                              }
830                              } } in     
831             let {
832               a1{-reR-} :: ((a{-reT-}, b{-reS-})-> (a{-reT-}, b{-reS-})-> PrelBase.Bool{-3c-})
833               a1{-reR-} = \ a2{-reV-} _Ks :: (a{-reT-}, b{-reS-})
834                             b1{-reU-} _Ks :: (a{-reT-}, b{-reS-}) ->
835                           PrelBase.not{-r6I-} (zeze2{-reN-} a2{-reV-} b1{-reU-})
836             } in
837               PrelBase.zdwZCDEq{-r8J-} @ (a{-reT-}, b{-reS-}) a1{-reR-} zeze2{-reN-})
838
839 and it's not as bad as it seems, because it's further dramatically
840 simplified: only zeze2 is extracted and its body is simplified.
841
842
843 %************************************************************************
844 %*                                                                      *
845 \subsection{Error messages}
846 %*                                                                      *
847 %************************************************************************
848
849 \begin{code}
850 instDeclCtxt1 hs_inst_ty 
851   = inst_decl_ctxt (case unLoc hs_inst_ty of
852                         HsForAllTy _ _ _ (L _ (HsPredTy pred)) -> ppr pred
853                         HsPredTy pred                    -> ppr pred
854                         other                            -> ppr hs_inst_ty)     -- Don't expect this
855 instDeclCtxt2 dfun_ty
856   = inst_decl_ctxt (ppr (mkClassPred cls tys))
857   where
858     (_,_,cls,tys) = tcSplitDFunTy dfun_ty
859
860 inst_decl_ctxt doc = ptext SLIT("In the instance declaration for") <+> quotes doc
861
862 superClassCtxt = ptext SLIT("When checking the super-classes of an instance declaration")
863
864 atInstCtxt name = ptext SLIT("In the associated type instance for") <+> 
865                   quotes (ppr name)
866
867 mustBeVarArgErr ty = 
868   sep [ ptext SLIT("Arguments that do not correspond to a class parameter") <+>
869         ptext SLIT("must be variables")
870       , ptext SLIT("Instead of a variable, found") <+> ppr ty
871       ]
872
873 wrongATArgErr ty instTy =
874   sep [ ptext SLIT("Type indexes must match class instance head")
875       , ptext SLIT("Found") <+> ppr ty <+> ptext SLIT("but expected") <+>
876          ppr instTy
877       ]
878 \end{code}