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