36bef1183db462aa07b54d87070b6724870a73b1
[ghc-hetmet.git] / compiler / typecheck / TcClassDcl.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5
6 Typechecking class declarations
7
8 \begin{code}
9 module TcClassDcl ( tcClassSigs, tcClassDecl2, 
10                     findMethodBind, instantiateMethod, tcInstanceMethodBody,
11                     mkGenericDefMethBind, getGenericInstances, 
12                     tcAddDeclCtxt, badMethodErr, badATErr, omittedATWarn
13                   ) where
14
15 #include "HsVersions.h"
16
17 import HsSyn
18 import RnHsSyn
19 import RnExpr
20 import Inst
21 import InstEnv
22 import TcPat( addInlinePrags )
23 import TcEnv
24 import TcBinds
25 import TcUnify
26 import TcHsType
27 import TcMType
28 import TcType
29 import TcRnMonad
30 import BuildTyCl( TcMethInfo )
31 import Generics
32 import Class
33 import TyCon
34 import MkId
35 import Id
36 import Name
37 import Var
38 import NameEnv
39 import NameSet
40 import Outputable
41 import PrelNames
42 import DynFlags
43 import ErrUtils
44 import Util
45 import ListSetOps
46 import SrcLoc
47 import Maybes
48 import BasicTypes
49 import Bag
50 import FastString
51
52 import Control.Monad
53 import Data.List
54 \end{code}
55
56
57 Dictionary handling
58 ~~~~~~~~~~~~~~~~~~~
59 Every class implicitly declares a new data type, corresponding to dictionaries
60 of that class. So, for example:
61
62         class (D a) => C a where
63           op1 :: a -> a
64           op2 :: forall b. Ord b => a -> b -> b
65
66 would implicitly declare
67
68         data CDict a = CDict (D a)      
69                              (a -> a)
70                              (forall b. Ord b => a -> b -> b)
71
72 (We could use a record decl, but that means changing more of the existing apparatus.
73 One step at at time!)
74
75 For classes with just one superclass+method, we use a newtype decl instead:
76
77         class C a where
78           op :: forallb. a -> b -> b
79
80 generates
81
82         newtype CDict a = CDict (forall b. a -> b -> b)
83
84 Now DictTy in Type is just a form of type synomym: 
85         DictTy c t = TyConTy CDict `AppTy` t
86
87 Death to "ExpandingDicts".
88
89
90 %************************************************************************
91 %*                                                                      *
92                 Type-checking the class op signatures
93 %*                                                                      *
94 %************************************************************************
95
96 \begin{code}
97 tcClassSigs :: Name                     -- Name of the class
98             -> [LSig Name]
99             -> LHsBinds Name
100             -> TcM [TcMethInfo]    -- One for each method
101
102 tcClassSigs clas sigs def_methods
103   = do { -- Check that all def_methods are in the class
104        ; op_info <- mapM (addLocM tc_sig) [sig | sig@(L _ (TypeSig _ _)) <- sigs]
105        ; let op_names = [ n | (n,_,_) <- op_info ]
106
107        ; sequence [ failWithTc (badMethodErr clas n)
108                   | n <- dm_bind_names, not (n `elem` op_names) ]
109                   -- Value binding for non class-method (ie no TypeSig)
110
111        ; sequence [ failWithTc (badGenericMethod clas n)
112                   | n <- genop_names, not (n `elem` dm_bind_names) ]
113                   -- Generic signature without value binding
114
115        ; return op_info }
116   where
117     dm_bind_names :: [Name]     -- These ones have a value binding in the class decl
118     dm_bind_names = [op | L _ (FunBind {fun_id = L _ op}) <- bagToList def_methods]
119
120     genop_names :: [Name]   -- These ones have a generic signature
121     genop_names = [n | L _ (GenericSig (L _ n) _) <- sigs]
122
123     tc_sig (TypeSig (L _ op_name) op_hs_ty)
124       = do { op_ty <- tcHsKindedType op_hs_ty   -- Class tyvars already in scope
125            ; let dm | op_name `elem` genop_names   = GenericDM
126                     | op_name `elem` dm_bind_names = VanillaDM
127                     | otherwise                    = NoDM
128            ; return (op_name, dm, op_ty) }
129     tc_sig sig = pprPanic "tc_cls_sig" (ppr sig)
130 \end{code}
131
132
133 %************************************************************************
134 %*                                                                      *
135                 Class Declarations
136 %*                                                                      *
137 %************************************************************************
138
139 \begin{code}
140 tcClassDecl2 :: LTyClDecl Name          -- The class declaration
141              -> TcM (LHsBinds Id)
142
143 tcClassDecl2 (L loc (ClassDecl {tcdLName = class_name, tcdSigs = sigs, 
144                                 tcdMeths = default_binds}))
145   = recoverM (return emptyLHsBinds)     $
146     setSrcSpan loc                      $
147     do  { clas <- tcLookupLocatedClass class_name
148
149         -- We make a separate binding for each default method.
150         -- At one time I used a single AbsBinds for all of them, thus
151         -- AbsBind [d] [dm1, dm2, dm3] { dm1 = ...; dm2 = ...; dm3 = ... }
152         -- But that desugars into
153         --      ds = \d -> (..., ..., ...)
154         --      dm1 = \d -> case ds d of (a,b,c) -> a
155         -- And since ds is big, it doesn't get inlined, so we don't get good
156         -- default methods.  Better to make separate AbsBinds for each
157         ; let
158               (tyvars, _, _, op_items) = classBigSig clas
159               prag_fn     = mkPragFun sigs default_binds
160               sig_fn      = mkSigFun sigs
161               clas_tyvars = tcSuperSkolTyVars tyvars
162               pred        = mkClassPred clas (mkTyVarTys clas_tyvars)
163         ; this_dict <- newEvVar pred
164
165         ; traceTc "TIM2" (ppr sigs)
166         ; let tc_dm = tcDefMeth clas clas_tyvars
167                                 this_dict default_binds sigs
168                                 sig_fn prag_fn
169
170         ; dm_binds <- tcExtendTyVarEnv clas_tyvars $
171                       mapM tc_dm op_items
172
173         ; return (unionManyBags dm_binds) }
174
175 tcClassDecl2 d = pprPanic "tcClassDecl2" (ppr d)
176     
177 tcDefMeth :: Class -> [TyVar] -> EvVar -> LHsBinds Name -> [LSig Name]
178           -> SigFun -> PragFun -> ClassOpItem
179           -> TcM (LHsBinds TcId)
180 -- Generate code for polymorphic default methods only (hence DefMeth)
181 -- (Generic default methods have turned into instance decls by now.)
182 -- This is incompatible with Hugs, which expects a polymorphic 
183 -- default method for every class op, regardless of whether or not 
184 -- the programmer supplied an explicit default decl for the class.  
185 -- (If necessary we can fix that, but we don't have a convenient Id to hand.)
186 tcDefMeth clas tyvars this_dict binds_in sigs sig_fn prag_fn (sel_id, dm_info)
187   | NoDefMeth <- dm_info = return emptyBag
188   | otherwise
189   = do  { (dm_id, tvs, sig_loc) <- tc_dm_id dm_info 
190         ; let L loc meth_bind = findMethodBind sel_name binds_in
191                                 `orElse` pprPanic "tcDefMeth" (ppr sel_id)
192               dm_bind = L loc (meth_bind { fun_id = L loc (idName dm_id) })
193                              -- Substitute the meth_name for the binder
194                              -- NB: the binding is always a FunBind
195
196               dm_sig_fn  _  = Just (clas_tv_names ++ tvs, sig_loc)
197               dm_prag_fn _  = prag_fn sel_name
198
199         ; (binds,_) <- tcExtendIdEnv [dm_id] $
200                        tcPolyBinds TopLevel dm_sig_fn dm_prag_fn 
201                              NonRecursive NonRecursive
202                              [dm_bind]
203         ; return binds }
204   where
205     sel_name      = idName sel_id
206     clas_tv_names = map getName tyvars
207
208     -- Find the 'generic op :: ty' signature among the sigs
209     -- If dm_info is GenDefMeth, the corresponding signature
210     -- should jolly well exist!  Hence the panic
211     genop_lhs_ty = case [lty | L _ (GenericSig (L _ n) lty) <- sigs
212                              , n == sel_name ] of
213                       [lty] -> lty
214                       _     -> pprPanic "tcDefMeth" (ppr sel_name $$ ppr sigs)
215
216     tc_dm_id :: DefMeth -> TcM (Id, [Name], SrcSpan)
217     -- Make a default-method Id of the appropriate type
218     -- That may entail getting the generic-default signature
219     -- from the type signatures.
220     -- Also return the in-scope tyvars for the default method, and their binding site
221     tc_dm_id NoDefMeth         = panic "tc_dm_id"
222     tc_dm_id (DefMeth dm_name) 
223       | Just (tvs, loc) <- sig_fn sel_name
224       = return (mkDefaultMethodId sel_id dm_name, tvs, loc)
225       | otherwise
226       = pprPanic "No sig for" (ppr sel_name)
227     tc_dm_id (GenDefMeth dm_name)
228       = setSrcSpan loc $
229         do { tau <- tcHsKindedType genop_lhs_ty
230            ; checkValidType (FunSigCtxt sel_name) tau   
231            ; return ( mkExportedLocalId dm_name (mkForAllTys tyvars tau)
232                     , hsExplicitTvs genop_lhs_ty, loc ) }
233       where
234         loc = getLoc genop_lhs_ty
235
236 ---------------
237 tcInstanceMethodBody :: SkolemInfo -> [TcTyVar] -> [EvVar]
238                      -> Id -> Id
239                      -> SigFun -> TcSpecPrags -> LHsBind Name 
240                      -> TcM (LHsBind Id)
241 tcInstanceMethodBody skol_info tyvars dfun_ev_vars
242                      meth_id local_meth_id
243                      meth_sig_fn specs 
244                      (L loc bind)
245   = do  {       -- Typecheck the binding, first extending the envt
246                 -- so that when tcInstSig looks up the local_meth_id to find
247                 -- its signature, we'll find it in the environment
248           let lm_bind = L loc (bind { fun_id = L loc (idName local_meth_id) })
249                              -- Substitute the local_meth_name for the binder
250                              -- NB: the binding is always a FunBind
251         ; traceTc "TIM" (ppr local_meth_id $$ ppr (meth_sig_fn (idName local_meth_id))) 
252         ; (ev_binds, (tc_bind, _)) 
253                <- checkConstraints skol_info tyvars dfun_ev_vars $
254                   tcExtendIdEnv [local_meth_id] $
255                   tcPolyBinds TopLevel meth_sig_fn no_prag_fn 
256                              NonRecursive NonRecursive
257                              [lm_bind]
258
259         ; let full_bind = AbsBinds { abs_tvs = tyvars, abs_ev_vars = dfun_ev_vars
260                                    , abs_exports = [(tyvars, meth_id, local_meth_id, specs)]
261                                    , abs_ev_binds = ev_binds
262                                    , abs_binds = tc_bind }
263
264         ; return (L loc full_bind) } 
265   where
266     no_prag_fn  _ = []          -- No pragmas for local_meth_id; 
267                                 -- they are all for meth_id
268 \end{code}
269
270 \begin{code}
271 instantiateMethod :: Class -> Id -> [TcType] -> TcType
272 -- Take a class operation, say  
273 --      op :: forall ab. C a => forall c. Ix c => (b,c) -> a
274 -- Instantiate it at [ty1,ty2]
275 -- Return the "local method type": 
276 --      forall c. Ix x => (ty2,c) -> ty1
277 instantiateMethod clas sel_id inst_tys
278   = ASSERT( ok_first_pred ) local_meth_ty
279   where
280     (sel_tyvars,sel_rho) = tcSplitForAllTys (idType sel_id)
281     rho_ty = ASSERT( length sel_tyvars == length inst_tys )
282              substTyWith sel_tyvars inst_tys sel_rho
283
284     (first_pred, local_meth_ty) = tcSplitPredFunTy_maybe rho_ty
285                 `orElse` pprPanic "tcInstanceMethod" (ppr sel_id)
286
287     ok_first_pred = case getClassPredTys_maybe first_pred of
288                       Just (clas1, _tys) -> clas == clas1
289                       Nothing -> False
290               -- The first predicate should be of form (C a b)
291               -- where C is the class in question
292
293
294 ---------------------------
295 findMethodBind  :: Name                 -- Selector name
296                 -> LHsBinds Name        -- A group of bindings
297                 -> Maybe (LHsBind Name) -- The binding
298 findMethodBind sel_name binds
299   = foldlBag mplus Nothing (mapBag f binds)
300   where 
301     f bind@(L _ (FunBind { fun_id = L _ op_name }))
302              | op_name == sel_name
303              = Just bind
304     f _other = Nothing
305 \end{code}
306
307 Note [Polymorphic methods]
308 ~~~~~~~~~~~~~~~~~~~~~~~~~~
309 Consider
310     class Foo a where
311         op :: forall b. Ord b => a -> b -> b -> b
312     instance Foo c => Foo [c] where
313         op = e
314
315 When typechecking the binding 'op = e', we'll have a meth_id for op
316 whose type is
317       op :: forall c. Foo c => forall b. Ord b => [c] -> b -> b -> b
318
319 So tcPolyBinds must be capable of dealing with nested polytypes; 
320 and so it is. See TcBinds.tcMonoBinds (with type-sig case).
321
322 Note [Silly default-method bind]
323 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
324 When we pass the default method binding to the type checker, it must
325 look like    op2 = e
326 not          $dmop2 = e
327 otherwise the "$dm" stuff comes out error messages.  But we want the
328 "$dm" to come out in the interface file.  So we typecheck the former,
329 and wrap it in a let, thus
330           $dmop2 = let op2 = e in op2
331 This makes the error messages right.
332
333
334 %************************************************************************
335 %*                                                                      *
336         Extracting generic instance declaration from class declarations
337 %*                                                                      *
338 %************************************************************************
339
340 @getGenericInstances@ extracts the generic instance declarations from a class
341 declaration.  For exmaple
342
343         class C a where
344           op :: a -> a
345         
346           op{ x+y } (Inl v)   = ...
347           op{ x+y } (Inr v)   = ...
348           op{ x*y } (v :*: w) = ...
349           op{ 1   } Unit      = ...
350
351 gives rise to the instance declarations
352
353         instance C (x+y) where
354           op (Inl v)   = ...
355           op (Inr v)   = ...
356         
357         instance C (x*y) where
358           op (v :*: w) = ...
359
360         instance C 1 where
361           op Unit      = ...
362
363 \begin{code}
364 mkGenericDefMethBind :: Class -> [Type] -> Id -> Name -> TcM (LHsBind Name)
365 mkGenericDefMethBind clas inst_tys sel_id dm_name
366   =     -- A generic default method
367         -- If the method is defined generically, we only have to call the
368         -- dm_name.
369     do  { dflags <- getDOpts
370         ; liftIO (dumpIfSet_dyn dflags Opt_D_dump_deriv "Filling in method body"
371                    (vcat [ppr clas <+> ppr inst_tys,
372                           nest 2 (ppr sel_id <+> equals <+> ppr rhs)]))
373
374         ; return (noLoc $ mkFunBind (noLoc (idName sel_id))
375                                     [mkSimpleMatch [] rhs]) }
376   where
377     rhs = nlHsVar dm_name
378
379 ---------------------------
380 getGenericInstances :: [LTyClDecl Name] -> TcM [InstInfo Name] 
381 getGenericInstances class_decls
382   = do  { gen_inst_infos <- mapM (addLocM get_generics) class_decls
383         ; let { gen_inst_info = concat gen_inst_infos }
384
385         -- Return right away if there is no generic stuff
386         ; if null gen_inst_info then return []
387           else do 
388
389         -- Otherwise print it out
390         { dumpDerivingInfo $ hang (ptext (sLit "Generic instances"))
391                                 2 (vcat (map pprInstInfoDetails gen_inst_info))
392         ; return gen_inst_info }}
393
394 get_generics :: TyClDecl Name -> TcM [InstInfo Name]
395 get_generics decl@(ClassDecl {tcdLName = class_name, tcdMeths = def_methods})
396   | null generic_binds
397   = return [] -- The comon case: no generic default methods
398
399   | otherwise   -- A source class decl with generic default methods
400   = recoverM (return [])                                $
401     tcAddDeclCtxt decl                                  $ do
402     clas <- tcLookupLocatedClass class_name
403
404         -- Group by type, and
405         -- make an InstInfo out of each group
406     let
407         groups = groupWith listToBag generic_binds
408
409     inst_infos <- mapM (mkGenericInstance clas) groups
410
411         -- Check that there is only one InstInfo for each type constructor
412         -- The main way this can fail is if you write
413         --      f {| a+b |} ... = ...
414         --      f {| x+y |} ... = ...
415         -- Then at this point we'll have an InstInfo for each
416         --
417         -- The class should be unary, which is why simpleInstInfoTyCon should be ok
418     let
419         tc_inst_infos :: [(TyCon, InstInfo Name)]
420         tc_inst_infos = [(simpleInstInfoTyCon i, i) | i <- inst_infos]
421
422         bad_groups = [group | group <- equivClassesByUniq get_uniq tc_inst_infos,
423                               group `lengthExceeds` 1]
424         get_uniq (tc,_) = getUnique tc
425
426     mapM_ (addErrTc . dupGenericInsts) bad_groups
427
428         -- Check that there is an InstInfo for each generic type constructor
429     let
430         missing = genericTyConNames `minusList` [tyConName tc | (tc,_) <- tc_inst_infos]
431
432     checkTc (null missing) (missingGenericInstances missing)
433
434     return inst_infos
435   where
436     generic_binds :: [(HsType Name, LHsBind Name)]
437     generic_binds = getGenericBinds def_methods
438 get_generics decl = pprPanic "get_generics" (ppr decl)
439
440
441 ---------------------------------
442 getGenericBinds :: LHsBinds Name -> [(HsType Name, LHsBind Name)]
443   -- Takes a group of method bindings, finds the generic ones, and returns
444   -- them in finite map indexed by the type parameter in the definition.
445 getGenericBinds binds = concat (map getGenericBind (bagToList binds))
446
447 getGenericBind :: LHsBindLR Name Name -> [(HsType Name, LHsBindLR Name Name)]
448 getGenericBind (L loc bind@(FunBind { fun_matches = MatchGroup matches ty }))
449   = groupWith wrap (mapCatMaybes maybeGenericMatch matches)
450   where
451     wrap ms = L loc (bind { fun_matches = MatchGroup ms ty })
452 getGenericBind _
453   = []
454
455 groupWith :: ([a] -> b) -> [(HsType Name, a)] -> [(HsType Name, b)]
456 groupWith _  []          = []
457 groupWith op ((t,v):prs) = (t, op (v:vs)) : groupWith op rest
458     where
459       vs              = map snd this
460       (this,rest)     = partition same_t prs
461       same_t (t', _v) = t `eqPatType` t'
462
463 eqPatLType :: LHsType Name -> LHsType Name -> Bool
464 eqPatLType t1 t2 = unLoc t1 `eqPatType` unLoc t2
465
466 eqPatType :: HsType Name -> HsType Name -> Bool
467 -- A very simple equality function, only for 
468 -- type patterns in generic function definitions.
469 eqPatType (HsTyVar v1)       (HsTyVar v2)       = v1==v2
470 eqPatType (HsAppTy s1 t1)    (HsAppTy s2 t2)    = s1 `eqPatLType` s2 && t1 `eqPatLType` t2
471 eqPatType (HsOpTy s1 op1 t1) (HsOpTy s2 op2 t2) = s1 `eqPatLType` s2 && t1 `eqPatLType` t2 && unLoc op1 == unLoc op2
472 eqPatType (HsNumTy n1)       (HsNumTy n2)       = n1 == n2
473 eqPatType (HsParTy t1)       t2                 = unLoc t1 `eqPatType` t2
474 eqPatType t1                 (HsParTy t2)       = t1 `eqPatType` unLoc t2
475 eqPatType _ _ = False
476
477 ---------------------------------
478 mkGenericInstance :: Class
479                   -> (HsType Name, LHsBinds Name)
480                   -> TcM (InstInfo Name)
481
482 mkGenericInstance clas (hs_ty, binds) = do
483   -- Make a generic instance declaration
484   -- For example:       instance (C a, C b) => C (a+b) where { binds }
485
486         -- Extract the universally quantified type variables
487         -- and wrap them as forall'd tyvars, so that kind inference
488         -- works in the standard way
489     let
490         sig_tvs = userHsTyVarBndrs $ map noLoc $ nameSetToList $
491                   extractHsTyVars (noLoc hs_ty)
492         hs_forall_ty = noLoc $ mkExplicitHsForAllTy sig_tvs (noLoc []) (noLoc hs_ty)
493
494         -- Type-check the instance type, and check its form
495     forall_inst_ty <- tcHsSigType GenPatCtxt hs_forall_ty
496     let
497         (tyvars, inst_ty) = tcSplitForAllTys forall_inst_ty
498
499     checkTc (validGenericInstanceType inst_ty)
500             (badGenericInstanceType binds)
501
502         -- Make the dictionary function.
503     span <- getSrcSpanM
504     overlap_flag <- getOverlapFlag
505     dfun_name <- newDFunName clas [inst_ty] span
506     let
507         inst_theta = [mkClassPred clas [mkTyVarTy tv] | tv <- tyvars]
508         dfun_id    = mkDictFunId dfun_name tyvars inst_theta clas [inst_ty]
509         ispec      = mkLocalInstance dfun_id overlap_flag
510
511     return (InstInfo { iSpec = ispec, iBinds = VanillaInst binds [] False })
512 \end{code}
513
514
515 %************************************************************************
516 %*                                                                      *
517                 Error messages
518 %*                                                                      *
519 %************************************************************************
520
521 \begin{code}
522 tcAddDeclCtxt :: TyClDecl Name -> TcM a -> TcM a
523 tcAddDeclCtxt decl thing_inside
524   = addErrCtxt ctxt thing_inside
525   where
526      thing | isClassDecl decl  = "class"
527            | isTypeDecl decl   = "type synonym" ++ maybeInst
528            | isDataDecl decl   = if tcdND decl == NewType 
529                                  then "newtype" ++ maybeInst
530                                  else "data type" ++ maybeInst
531            | isFamilyDecl decl = "family"
532            | otherwise         = panic "tcAddDeclCtxt/thing"
533
534      maybeInst | isFamInstDecl decl = " instance"
535                | otherwise          = ""
536
537      ctxt = hsep [ptext (sLit "In the"), text thing, 
538                   ptext (sLit "declaration for"), quotes (ppr (tcdName decl))]
539
540 badMethodErr :: Outputable a => a -> Name -> SDoc
541 badMethodErr clas op
542   = hsep [ptext (sLit "Class"), quotes (ppr clas), 
543           ptext (sLit "does not have a method"), quotes (ppr op)]
544
545 badGenericMethod :: Outputable a => a -> Name -> SDoc
546 badGenericMethod clas op
547   = hsep [ptext (sLit "Class"), quotes (ppr clas), 
548           ptext (sLit "has a generic-default signature without a binding"), quotes (ppr op)]
549
550 badATErr :: Class -> Name -> SDoc
551 badATErr clas at
552   = hsep [ptext (sLit "Class"), quotes (ppr clas), 
553           ptext (sLit "does not have an associated type"), quotes (ppr at)]
554
555 omittedATWarn :: Name -> SDoc
556 omittedATWarn at
557   = ptext (sLit "No explicit AT declaration for") <+> quotes (ppr at)
558
559 badGenericInstance :: Var -> SDoc -> SDoc
560 badGenericInstance sel_id because
561   = sep [ptext (sLit "Can't derive generic code for") <+> quotes (ppr sel_id),
562          because]
563
564 notSimple :: [Type] -> SDoc
565 notSimple inst_tys
566   = vcat [ptext (sLit "because the instance type(s)"), 
567           nest 2 (ppr inst_tys),
568           ptext (sLit "is not a simple type of form (T a1 ... an)")]
569
570 notGeneric :: TyCon -> SDoc
571 notGeneric tycon
572   = vcat [ptext (sLit "because the instance type constructor") <+> quotes (ppr tycon) <+> 
573           ptext (sLit "was not compiled with -XGenerics")]
574
575 badGenericInstanceType :: LHsBinds Name -> SDoc
576 badGenericInstanceType binds
577   = vcat [ptext (sLit "Illegal type pattern in the generic bindings"),
578           nest 2 (ppr binds)]
579
580 missingGenericInstances :: [Name] -> SDoc
581 missingGenericInstances missing
582   = ptext (sLit "Missing type patterns for") <+> pprQuotedList missing
583           
584 dupGenericInsts :: [(TyCon, InstInfo a)] -> SDoc
585 dupGenericInsts tc_inst_infos
586   = vcat [ptext (sLit "More than one type pattern for a single generic type constructor:"),
587           nest 2 (vcat (map ppr_inst_ty tc_inst_infos)),
588           ptext (sLit "All the type patterns for a generic type constructor must be identical")
589     ]
590   where 
591     ppr_inst_ty (_,inst) = ppr (simpleInstInfoTy inst)
592
593 mixedGenericErr :: Name -> SDoc
594 mixedGenericErr op
595   = ptext (sLit "Can't mix generic and non-generic equations for class method") <+> quotes (ppr op)
596 \end{code}