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