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