2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[TcClassDcl]{Typechecking class declarations}
7 module TcClassDcl ( tcClassSigs, tcClassDecl2,
9 MethodSpec, tcMethodBind, mkMethodBind,
10 tcAddDeclCtxt, badMethodErr
13 #include "HsVersions.h"
15 import HsSyn ( TyClDecl(..), Sig(..), MonoBinds(..), HsType(..),
16 HsExpr(..), HsLit(..), Pat(WildPat), HsTyVarBndr(..),
17 mkSimpleMatch, andMonoBinds, andMonoBindList,
18 isPragSig, placeHolderType, mkExplicitHsForAllTy
20 import BasicTypes ( RecFlag(..), NewOrData(..) )
21 import RnHsSyn ( RenamedTyClDecl, RenamedSig,
22 RenamedClassOpSig, RenamedMonoBinds,
23 maybeGenericMatch, extractHsTyVars
25 import RnExpr ( rnExpr )
26 import RnEnv ( lookupTopBndrRn, lookupImportedName )
27 import TcHsSyn ( TcMonoBinds )
29 import Inst ( Inst, InstOrigin(..), instToId, newDicts, newMethod )
30 import TcEnv ( tcLookupClass, tcExtendLocalValEnv2, tcExtendTyVarEnv2,
31 InstInfo(..), pprInstInfoDetails,
32 simpleInstInfoTyCon, simpleInstInfoTy,
33 InstBindings(..), newDFunName
35 import TcBinds ( tcMonoBinds, tcSpecSigs )
36 import TcHsType ( TcSigInfo(..), mkTcSig, tcHsKindedType, tcHsSigType )
37 import TcSimplify ( tcSimplifyCheck, bindInstsOfLocalFuns )
38 import TcUnify ( checkSigTyVars, sigCtxt )
39 import TcMType ( tcInstTyVars, UserTypeCtxt( GenPatCtxt ) )
40 import TcType ( Type, TyVarDetails(..), TcType, TcThetaType, TcTyVar,
41 mkClassPred, tcSplitSigmaTy, tcSplitFunTys,
42 tcIsTyVarTy, tcSplitTyConApp_maybe, tcSplitForAllTys, tcSplitPhiTy,
43 getClassPredTys_maybe, mkPhiTy, mkTyVarTy
46 import Generics ( mkGenericRhs, validGenericInstanceType )
47 import PrelInfo ( nO_METHOD_BINDING_ERROR_ID )
48 import Class ( classTyVars, classBigSig,
49 Class, ClassOpItem, DefMeth (..) )
50 import TyCon ( TyCon, tyConName, tyConHasGenerics )
51 import Subst ( substTyWith )
52 import MkId ( mkDefaultMethodId, mkDictFunId )
53 import Id ( Id, idType, idName, mkUserLocal, setInlinePragma )
54 import Name ( Name, NamedThing(..) )
55 import NameEnv ( NameEnv, lookupNameEnv, emptyNameEnv, unitNameEnv, plusNameEnv )
56 import NameSet ( emptyNameSet, unitNameSet, nameSetToList )
57 import OccName ( reportIfUnused, mkDefaultMethodOcc )
58 import RdrName ( RdrName, mkDerivedRdrName )
61 import PrelNames ( genericTyConNames )
63 import UnicodeUtil ( stringToUtf8 )
64 import ErrUtils ( dumpIfSet, dumpIfSet_dyn )
65 import Util ( count, lengthIs, isSingleton, lengthExceeds )
66 import Unique ( Uniquable(..) )
67 import ListSetOps ( equivClassesByUniq, minusList )
68 import SrcLoc ( SrcLoc )
69 import Maybes ( seqMaybe, isJust, mapCatMaybes )
70 import List ( partition )
78 Every class implicitly declares a new data type, corresponding to dictionaries
79 of that class. So, for example:
81 class (D a) => C a where
83 op2 :: forall b. Ord b => a -> b -> b
85 would implicitly declare
87 data CDict a = CDict (D a)
89 (forall b. Ord b => a -> b -> b)
91 (We could use a record decl, but that means changing more of the existing apparatus.
94 For classes with just one superclass+method, we use a newtype decl instead:
97 op :: forallb. a -> b -> b
101 newtype CDict a = CDict (forall b. a -> b -> b)
103 Now DictTy in Type is just a form of type synomym:
104 DictTy c t = TyConTy CDict `AppTy` t
106 Death to "ExpandingDicts".
109 %************************************************************************
111 Type-checking the class op signatures
113 %************************************************************************
116 tcClassSigs :: Name -- Name of the class
117 -> [RenamedClassOpSig]
121 type TcMethInfo = (Name, DefMeth, Type) -- A temporary intermediate, to communicate
122 -- between tcClassSigs and buildClass
123 tcClassSigs clas sigs def_methods
124 = do { dm_env <- checkDefaultBinds clas op_names def_methods
125 ; mappM (tcClassSig dm_env) op_sigs }
127 op_sigs = [sig | sig@(Sig n _ _) <- sigs]
128 op_names = [n | sig@(Sig n _ _) <- op_sigs]
131 checkDefaultBinds :: Name -> [Name] -> RenamedMonoBinds
132 -> TcM (NameEnv Bool)
133 -- Check default bindings
134 -- a) must be for a class op for this class
135 -- b) must be all generic or all non-generic
136 -- and return a mapping from class-op to Bool
137 -- where True <=> it's a generic default method
139 checkDefaultBinds clas ops EmptyMonoBinds
140 = returnM emptyNameEnv
142 checkDefaultBinds clas ops (AndMonoBinds b1 b2)
143 = do { dm_info1 <- checkDefaultBinds clas ops b1
144 ; dm_info2 <- checkDefaultBinds clas ops b2
145 ; returnM (dm_info1 `plusNameEnv` dm_info2) }
147 checkDefaultBinds clas ops (FunMonoBind op _ matches loc)
149 { -- Check that the op is from this class
150 checkTc (op `elem` ops) (badMethodErr clas op)
152 -- Check that all the defns ar generic, or none are
153 ; checkTc (all_generic || none_generic) (mixedGenericErr op)
155 ; returnM (unitNameEnv op all_generic)
158 n_generic = count (isJust . maybeGenericMatch) matches
159 none_generic = n_generic == 0
160 all_generic = matches `lengthIs` n_generic
163 tcClassSig :: NameEnv Bool -- Info about default methods;
167 tcClassSig dm_env (Sig op_name op_hs_ty src_loc)
168 = addSrcLoc src_loc $ do
169 { op_ty <- tcHsKindedType op_hs_ty -- Class tyvars already in scope
170 ; let dm = case lookupNameEnv dm_env op_name of
172 Just False -> DefMeth
173 Just True -> GenDefMeth
174 ; returnM (op_name, dm, op_ty) }
178 %************************************************************************
180 \subsection[Default methods]{Default methods}
182 %************************************************************************
184 The default methods for a class are each passed a dictionary for the
185 class, so that they get access to the other methods at the same type.
186 So, given the class decl
190 op2 :: Ord b => a -> b -> b -> b
193 op2 x y z = if (op1 x) && (y < z) then y else z
195 we get the default methods:
197 defm.Foo.op1 :: forall a. Foo a => a -> Bool
198 defm.Foo.op1 = /\a -> \dfoo -> \x -> True
200 defm.Foo.op2 :: forall a. Foo a => forall b. Ord b => a -> b -> b -> b
201 defm.Foo.op2 = /\ a -> \ dfoo -> /\ b -> \ dord -> \x y z ->
202 if (op1 a dfoo x) && (< b dord y z) then y else z
205 When we come across an instance decl, we may need to use the default
208 instance Foo Int where {}
212 const.Foo.Int.op1 :: Int -> Bool
213 const.Foo.Int.op1 = defm.Foo.op1 Int dfun.Foo.Int
215 const.Foo.Int.op2 :: forall b. Ord b => Int -> b -> b -> b
216 const.Foo.Int.op2 = defm.Foo.op2 Int dfun.Foo.Int
218 dfun.Foo.Int :: Foo Int
219 dfun.Foo.Int = (const.Foo.Int.op1, const.Foo.Int.op2)
221 Notice that, as with method selectors above, we assume that dictionary
222 application is curried, so there's no need to mention the Ord dictionary
223 in const.Foo.Int.op2 (or the type variable).
226 instance Foo a => Foo [a] where {}
228 dfun.Foo.List :: forall a. Foo a -> Foo [a]
230 = /\ a -> \ dfoo_a ->
232 op1 = defm.Foo.op1 [a] dfoo_list
233 op2 = defm.Foo.op2 [a] dfoo_list
234 dfoo_list = (op1, op2)
239 @tcClassDecls2@ generates bindings for polymorphic default methods
240 (generic default methods have by now turned into instance declarations)
243 tcClassDecl2 :: RenamedTyClDecl -- The class declaration
244 -> TcM (TcMonoBinds, [Id])
246 tcClassDecl2 (ClassDecl {tcdName = class_name, tcdSigs = sigs,
247 tcdMeths = default_binds, tcdLoc = src_loc})
248 = recoverM (returnM (EmptyMonoBinds, [])) $
250 tcLookupClass class_name `thenM` \ clas ->
252 -- We make a separate binding for each default method.
253 -- At one time I used a single AbsBinds for all of them, thus
254 -- AbsBind [d] [dm1, dm2, dm3] { dm1 = ...; dm2 = ...; dm3 = ... }
255 -- But that desugars into
256 -- ds = \d -> (..., ..., ...)
257 -- dm1 = \d -> case ds d of (a,b,c) -> a
258 -- And since ds is big, it doesn't get inlined, so we don't get good
259 -- default methods. Better to make separate AbsBinds for each
261 (tyvars, _, _, op_items) = classBigSig clas
262 prags = filter isPragSig sigs
263 tc_dm = tcDefMeth clas tyvars default_binds prags
265 dm_sel_ids = [sel_id | (sel_id, DefMeth) <- op_items]
266 -- Generate code for polymorphic default methods only
267 -- (Generic default methods have turned into instance decls by now.)
268 -- This is incompatible with Hugs, which expects a polymorphic
269 -- default method for every class op, regardless of whether or not
270 -- the programmer supplied an explicit default decl for the class.
271 -- (If necessary we can fix that, but we don't have a convenient Id to hand.)
273 mapAndUnzipM tc_dm dm_sel_ids `thenM` \ (defm_binds, dm_ids_s) ->
274 returnM (andMonoBindList defm_binds, concat dm_ids_s)
276 tcDefMeth clas tyvars binds_in prags sel_id
277 = lookupTopBndrRn (mkDefMethRdrName sel_id) `thenM` \ dm_name ->
278 tcInstTyVars ClsTv tyvars `thenM` \ (clas_tyvars, inst_tys, _) ->
280 dm_ty = idType sel_id -- Same as dict selector!
281 theta = [mkClassPred clas inst_tys]
282 local_dm_id = mkDefaultMethodId dm_name dm_ty
283 xtve = tyvars `zip` clas_tyvars
284 origin = ClassDeclOrigin
286 mkMethodBind origin clas inst_tys
287 binds_in (sel_id, DefMeth) `thenM` \ (_, meth_info) ->
288 newDicts origin theta `thenM` \ [this_dict] ->
289 getLIE (tcMethodBind xtve clas_tyvars theta
290 [this_dict] prags meth_info) `thenM` \ (defm_bind, insts_needed) ->
292 addErrCtxt (defltMethCtxt clas) $
296 (ptext SLIT("class") <+> ppr clas)
299 insts_needed `thenM` \ dict_binds ->
301 -- Simplification can do unification
302 checkSigTyVars clas_tyvars `thenM` \ clas_tyvars' ->
305 (_,dm_inst_id,_) = meth_info
309 [(clas_tyvars', local_dm_id, dm_inst_id)]
310 emptyNameSet -- No inlines (yet)
311 (dict_binds `andMonoBinds` defm_bind)
313 returnM (full_bind, [local_dm_id])
315 mkDefMethRdrName :: Id -> RdrName
316 mkDefMethRdrName sel_id = mkDerivedRdrName (idName sel_id) mkDefaultMethodOcc
320 %************************************************************************
322 \subsection{Typechecking a method}
324 %************************************************************************
326 @tcMethodBind@ is used to type-check both default-method and
327 instance-decl method declarations. We must type-check methods one at a
328 time, because their signatures may have different contexts and
332 type MethodSpec = (Id, -- Global selector Id
333 Id, -- Local Id (class tyvars instantiated)
334 RenamedMonoBinds) -- Binding for the method
337 :: [(TyVar,TcTyVar)] -- Bindings for type environment
338 -> [TcTyVar] -- Instantiated type variables for the
339 -- enclosing class/instance decl.
340 -- They'll be signature tyvars, and we
341 -- want to check that they don't get bound
342 -- Always equal the range of the type envt
343 -> TcThetaType -- Available theta; it's just used for the error message
344 -> [Inst] -- Available from context, used to simplify constraints
345 -- from the method body
346 -> [RenamedSig] -- Pragmas (e.g. inline pragmas)
347 -> MethodSpec -- Details of this method
350 tcMethodBind xtve inst_tyvars inst_theta avail_insts prags
351 (sel_id, meth_id, meth_bind)
352 = -- Check the bindings; first adding inst_tyvars to the envt
353 -- so that we don't quantify over them in nested places
354 mkTcSig meth_id `thenM` \ meth_sig ->
356 tcExtendTyVarEnv2 xtve (
357 addErrCtxt (methodCtxt sel_id) $
359 tcMonoBinds meth_bind [meth_sig] NonRecursive
360 ) `thenM` \ ((meth_bind,_), meth_lie) ->
362 -- Now do context reduction. We simplify wrt both the local tyvars
363 -- and the ones of the class/instance decl, so that there is
366 -- op :: Eq a => a -> b -> a
368 -- We do this for each method independently to localise error messages
371 TySigInfo meth_id meth_tvs meth_theta _ local_meth_id _ _ = meth_sig
373 addErrCtxtM (sigCtxt sel_id inst_tyvars inst_theta (idType meth_id)) $
374 newDicts SignatureOrigin meth_theta `thenM` \ meth_dicts ->
376 all_tyvars = meth_tvs ++ inst_tyvars
377 all_insts = avail_insts ++ meth_dicts
380 (ptext SLIT("class or instance method") <+> quotes (ppr sel_id))
381 all_tyvars all_insts meth_lie `thenM` \ lie_binds ->
383 checkSigTyVars all_tyvars `thenM` \ all_tyvars' ->
386 sel_name = idName sel_id
387 inline_prags = [ (is_inl, phase)
388 | InlineSig is_inl name phase _ <- prags,
391 | prag@(SpecSig name _ _) <- prags,
394 -- Attach inline pragmas as appropriate
395 (final_meth_id, inlines)
396 | ((is_inline, phase) : _) <- inline_prags
397 = (meth_id `setInlinePragma` phase,
398 if is_inline then unitNameSet (idName meth_id) else emptyNameSet)
400 = (meth_id, emptyNameSet)
402 meth_tvs' = take (length meth_tvs) all_tyvars'
403 poly_meth_bind = AbsBinds meth_tvs'
404 (map instToId meth_dicts)
405 [(meth_tvs', final_meth_id, local_meth_id)]
407 (lie_binds `andMonoBinds` meth_bind)
410 -- Deal with specialisation pragmas
411 -- The sel_name is what appears in the pragma
412 tcExtendLocalValEnv2 [(sel_name, final_meth_id)] (
413 getLIE (tcSpecSigs spec_prags) `thenM` \ (spec_binds1, prag_lie) ->
415 -- The prag_lie for a SPECIALISE pragma will mention the function itself,
416 -- so we have to simplify them away right now lest they float outwards!
417 bindInstsOfLocalFuns prag_lie [final_meth_id] `thenM` \ spec_binds2 ->
418 returnM (spec_binds1 `andMonoBinds` spec_binds2)
419 ) `thenM` \ spec_binds ->
421 returnM (poly_meth_bind `andMonoBinds` spec_binds)
424 mkMethodBind :: InstOrigin
425 -> Class -> [TcType] -- Class and instance types
426 -> RenamedMonoBinds -- Method binding (pick the right one from in here)
428 -> TcM (Maybe Inst, -- Method inst
430 -- Find the binding for the specified method, or make
431 -- up a suitable default method if it isn't there
433 mkMethodBind origin clas inst_tys meth_binds (sel_id, dm_info)
434 = mkMethId origin clas sel_id inst_tys `thenM` \ (mb_inst, meth_id) ->
436 meth_name = idName meth_id
438 -- Figure out what method binding to use
439 -- If the user suppplied one, use it, else construct a default one
440 getSrcLocM `thenM` \ loc ->
441 (case find_bind (idName sel_id) meth_name meth_binds of
442 Just user_bind -> returnM user_bind
443 Nothing -> mkDefMethRhs origin clas inst_tys sel_id loc dm_info `thenM` \ rhs ->
444 returnM (FunMonoBind meth_name False -- Not infix decl
445 [mkSimpleMatch [] rhs placeHolderType loc] loc)
446 ) `thenM` \ meth_bind ->
448 returnM (mb_inst, (sel_id, meth_id, meth_bind))
450 mkMethId :: InstOrigin -> Class
451 -> Id -> [TcType] -- Selector, and instance types
452 -> TcM (Maybe Inst, Id)
454 -- mkMethId instantiates the selector Id at the specified types
455 mkMethId origin clas sel_id inst_tys
457 (tyvars,rho) = tcSplitForAllTys (idType sel_id)
458 rho_ty = ASSERT( length tyvars == length inst_tys )
459 substTyWith tyvars inst_tys rho
460 (preds,tau) = tcSplitPhiTy rho_ty
461 first_pred = head preds
463 -- The first predicate should be of form (C a b)
464 -- where C is the class in question
465 ASSERT( not (null preds) &&
466 case getClassPredTys_maybe first_pred of
467 { Just (clas1,tys) -> clas == clas1 ; Nothing -> False }
469 if isSingleton preds then
470 -- If it's the only one, make a 'method'
471 getInstLoc origin `thenM` \ inst_loc ->
472 newMethod inst_loc sel_id inst_tys preds tau `thenM` \ meth_inst ->
473 returnM (Just meth_inst, instToId meth_inst)
475 -- If it's not the only one we need to be careful
476 -- For example, given 'op' defined thus:
478 -- op :: (?x :: String) => a -> a
479 -- (mkMethId op T) should return an Inst with type
480 -- (?x :: String) => T -> T
481 -- That is, the class-op's context is still there.
482 -- BUT: it can't be a Method any more, because it breaks
483 -- INVARIANT 2 of methods. (See the data decl for Inst.)
484 newUnique `thenM` \ uniq ->
485 getSrcLocM `thenM` \ loc ->
487 real_tau = mkPhiTy (tail preds) tau
488 meth_id = mkUserLocal (getOccName sel_id) uniq real_tau loc
490 returnM (Nothing, meth_id)
492 -- The user didn't supply a method binding,
493 -- so we have to make up a default binding
494 -- The RHS of a default method depends on the default-method info
495 mkDefMethRhs origin clas inst_tys sel_id loc DefMeth
496 = -- An polymorphic default method
497 lookupImportedName (mkDefMethRdrName sel_id) `thenM` \ dm_name ->
498 -- Might not be imported, but will be an OrigName
499 traceRn (text "mkDefMeth" <+> ppr dm_name) `thenM_`
500 returnM (HsVar dm_name)
502 mkDefMethRhs origin clas inst_tys sel_id loc NoDefMeth
503 = -- No default method
504 -- Warn only if -fwarn-missing-methods
505 doptM Opt_WarnMissingMethods `thenM` \ warn ->
506 warnTc (isInstDecl origin
508 && reportIfUnused (getOccName sel_id))
509 (omittedMethodWarn sel_id) `thenM_`
512 error_rhs = HsLam (mkSimpleMatch wild_pats simple_rhs placeHolderType loc)
513 simple_rhs = HsApp (HsVar (getName nO_METHOD_BINDING_ERROR_ID))
514 (HsLit (HsStringPrim (mkFastString (stringToUtf8 error_msg))))
515 error_msg = showSDoc (hcat [ppr loc, text "|", ppr sel_id ])
517 -- When the type is of form t1 -> t2 -> t3
518 -- make a default method like (\ _ _ -> noMethBind "blah")
519 -- rather than simply (noMethBind "blah")
520 -- Reason: if t1 or t2 are higher-ranked types we get n
521 -- silly ambiguity messages.
522 -- Example: f :: (forall a. Eq a => a -> a) -> Int
524 -- Here, tcSub tries to force (error "urk") to have the right type,
525 -- thus: f = \(x::forall a. Eq a => a->a) -> error "urk" (x t)
526 -- where 't' is fresh ty var. This leads directly to "ambiguous t".
528 -- NB: technically this changes the meaning of the default-default
529 -- method slightly, because `seq` can see the lambdas. Oh well.
530 (_,_,tau1) = tcSplitSigmaTy (idType sel_id)
531 (_,_,tau2) = tcSplitSigmaTy tau1
532 -- Need two splits because the selector can have a type like
533 -- forall a. Foo a => forall b. Eq b => ...
534 (arg_tys, _) = tcSplitFunTys tau2
535 wild_pats = [WildPat placeHolderType | ty <- arg_tys]
537 mkDefMethRhs origin clas inst_tys sel_id loc GenDefMeth
538 = -- A generic default method
539 -- If the method is defined generically, we can only do the job if the
540 -- instance declaration is for a single-parameter type class with
541 -- a type constructor applied to type arguments in the instance decl
542 -- (checkTc, so False provokes the error)
543 ASSERT( isInstDecl origin ) -- We never get here from a class decl
544 do { checkTc (isJust maybe_tycon)
545 (badGenericInstance sel_id (notSimple inst_tys))
546 ; checkTc (tyConHasGenerics tycon)
547 (badGenericInstance sel_id (notGeneric tycon))
550 ; ioToTcRn (dumpIfSet_dyn dflags Opt_D_dump_deriv "Filling in method body"
551 (vcat [ppr clas <+> ppr inst_tys,
552 nest 2 (ppr sel_id <+> equals <+> ppr rhs)]))
554 -- Rename it before returning it
555 ; (rn_rhs, _) <- rnExpr rhs
558 rhs = mkGenericRhs sel_id clas_tyvar tycon
560 -- The tycon is only used in the generic case, and in that
561 -- case we require that the instance decl is for a single-parameter
562 -- type class with type variable arguments:
563 -- instance (...) => C (T a b)
564 clas_tyvar = head (classTyVars clas)
565 Just tycon = maybe_tycon
566 maybe_tycon = case inst_tys of
567 [ty] -> case tcSplitTyConApp_maybe ty of
568 Just (tycon, arg_tys) | all tcIsTyVarTy arg_tys -> Just tycon
572 isInstDecl InstanceDeclOrigin = True
573 isInstDecl ClassDeclOrigin = False
578 -- The renamer just puts the selector ID as the binder in the method binding
579 -- but we must use the method name; so we substitute it here. Crude but simple.
580 find_bind sel_name meth_name (FunMonoBind op_name fix matches loc)
581 | op_name == sel_name = Just (FunMonoBind meth_name fix matches loc)
582 find_bind sel_name meth_name (AndMonoBinds b1 b2)
583 = find_bind sel_name meth_name b1 `seqMaybe` find_bind sel_name meth_name b2
584 find_bind sel_name meth_name other = Nothing -- Default case
588 %************************************************************************
590 \subsection{Extracting generic instance declaration from class declarations}
592 %************************************************************************
594 @getGenericInstances@ extracts the generic instance declarations from a class
595 declaration. For exmaple
600 op{ x+y } (Inl v) = ...
601 op{ x+y } (Inr v) = ...
602 op{ x*y } (v :*: w) = ...
605 gives rise to the instance declarations
607 instance C (x+y) where
611 instance C (x*y) where
619 getGenericInstances :: [RenamedTyClDecl] -> TcM [InstInfo]
620 getGenericInstances class_decls
621 = do { gen_inst_infos <- mappM get_generics class_decls
622 ; let { gen_inst_info = concat gen_inst_infos }
624 -- Return right away if there is no generic stuff
625 ; if null gen_inst_info then returnM []
628 -- Otherwise print it out
630 ; ioToTcRn (dumpIfSet_dyn dflags Opt_D_dump_deriv "Generic instances"
631 (vcat (map pprInstInfoDetails gen_inst_info)))
632 ; returnM gen_inst_info }}
634 get_generics decl@(ClassDecl {tcdName = class_name, tcdMeths = def_methods, tcdLoc = loc})
636 = returnM [] -- The comon case: no generic default methods
638 | otherwise -- A source class decl with generic default methods
639 = recoverM (returnM []) $
641 tcLookupClass class_name `thenM` \ clas ->
643 -- Group by type, and
644 -- make an InstInfo out of each group
646 groups = groupWith andMonoBindList generic_binds
648 mappM (mkGenericInstance clas loc) groups `thenM` \ inst_infos ->
650 -- Check that there is only one InstInfo for each type constructor
651 -- The main way this can fail is if you write
652 -- f {| a+b |} ... = ...
653 -- f {| x+y |} ... = ...
654 -- Then at this point we'll have an InstInfo for each
656 tc_inst_infos :: [(TyCon, InstInfo)]
657 tc_inst_infos = [(simpleInstInfoTyCon i, i) | i <- inst_infos]
659 bad_groups = [group | group <- equivClassesByUniq get_uniq tc_inst_infos,
660 group `lengthExceeds` 1]
661 get_uniq (tc,_) = getUnique tc
663 mappM (addErrTc . dupGenericInsts) bad_groups `thenM_`
665 -- Check that there is an InstInfo for each generic type constructor
667 missing = genericTyConNames `minusList` [tyConName tc | (tc,_) <- tc_inst_infos]
669 checkTc (null missing) (missingGenericInstances missing) `thenM_`
673 generic_binds :: [(HsType Name, RenamedMonoBinds)]
674 generic_binds = getGenericBinds def_methods
677 ---------------------------------
678 getGenericBinds :: RenamedMonoBinds -> [(HsType Name, RenamedMonoBinds)]
679 -- Takes a group of method bindings, finds the generic ones, and returns
680 -- them in finite map indexed by the type parameter in the definition.
682 getGenericBinds EmptyMonoBinds = []
683 getGenericBinds (AndMonoBinds m1 m2) = getGenericBinds m1 ++ getGenericBinds m2
685 getGenericBinds (FunMonoBind id infixop matches loc)
686 = groupWith wrap (mapCatMaybes maybeGenericMatch matches)
688 wrap ms = FunMonoBind id infixop ms loc
690 groupWith :: ([a] -> b) -> [(HsType Name, a)] -> [(HsType Name, b)]
692 groupWith op ((t,v):prs) = (t, op (v:vs)) : groupWith op rest
695 (this,rest) = partition same_t prs
696 same_t (t',v) = t `eqPatType` t'
698 eqPatType :: HsType Name -> HsType Name -> Bool
699 -- A very simple equality function, only for
700 -- type patterns in generic function definitions.
701 eqPatType (HsTyVar v1) (HsTyVar v2) = v1==v2
702 eqPatType (HsAppTy s1 t1) (HsAppTy s2 t2) = s1 `eqPatType` s2 && t2 `eqPatType` t2
703 eqPatType (HsOpTy s1 op1 t1) (HsOpTy s2 op2 t2) = s1 `eqPatType` s2 && t2 `eqPatType` t2 && op1 == op2
704 eqPatType (HsNumTy n1) (HsNumTy n2) = n1 == n2
705 eqPatType (HsParTy t1) t2 = t1 `eqPatType` t2
706 eqPatType t1 (HsParTy t2) = t1 `eqPatType` t2
707 eqPatType _ _ = False
709 ---------------------------------
710 mkGenericInstance :: Class -> SrcLoc
711 -> (HsType Name, RenamedMonoBinds)
714 mkGenericInstance clas loc (hs_ty, binds)
715 -- Make a generic instance declaration
716 -- For example: instance (C a, C b) => C (a+b) where { binds }
718 = -- Extract the universally quantified type variables
719 -- and wrap them as forall'd tyvars, so that kind inference
720 -- works in the standard way
722 sig_tvs = map UserTyVar (nameSetToList (extractHsTyVars hs_ty))
723 hs_forall_ty = mkExplicitHsForAllTy sig_tvs [] hs_ty
725 -- Type-check the instance type, and check its form
726 tcHsSigType GenPatCtxt hs_forall_ty `thenM` \ forall_inst_ty ->
728 (tyvars, inst_ty) = tcSplitForAllTys forall_inst_ty
730 checkTc (validGenericInstanceType inst_ty)
731 (badGenericInstanceType binds) `thenM_`
733 -- Make the dictionary function.
734 newDFunName clas [inst_ty] loc `thenM` \ dfun_name ->
736 inst_theta = [mkClassPred clas [mkTyVarTy tv] | tv <- tyvars]
737 dfun_id = mkDictFunId dfun_name tyvars inst_theta clas [inst_ty]
740 returnM (InstInfo { iDFunId = dfun_id, iBinds = VanillaInst binds [] })
744 %************************************************************************
748 %************************************************************************
751 tcAddDeclCtxt decl thing_inside
752 = addSrcLoc (tcdLoc decl) $
757 ClassDecl {} -> "class"
758 TySynonym {} -> "type synonym"
759 TyData {tcdND = NewType} -> "newtype"
760 TyData {tcdND = DataType} -> "data type"
762 ctxt = hsep [ptext SLIT("In the"), text thing,
763 ptext SLIT("declaration for"), quotes (ppr (tcdName decl))]
766 = ptext SLIT("When checking the default methods for class") <+> quotes (ppr clas)
769 = ptext SLIT("In the definition for method") <+> quotes (ppr sel_id)
772 = hsep [ptext SLIT("Class"), quotes (ppr clas),
773 ptext SLIT("does not have a method"), quotes (ppr op)]
775 omittedMethodWarn sel_id
776 = ptext SLIT("No explicit method nor default method for") <+> quotes (ppr sel_id)
778 badGenericInstance sel_id because
779 = sep [ptext SLIT("Can't derive generic code for") <+> quotes (ppr sel_id),
783 = vcat [ptext SLIT("because the instance type(s)"),
784 nest 2 (ppr inst_tys),
785 ptext SLIT("is not a simple type of form (T a b c)")]
788 = vcat [ptext SLIT("because the instance type constructor") <+> quotes (ppr tycon) <+>
789 ptext SLIT("was not compiled with -fgenerics")]
791 badGenericInstanceType binds
792 = vcat [ptext SLIT("Illegal type pattern in the generic bindings"),
795 missingGenericInstances missing
796 = ptext SLIT("Missing type patterns for") <+> pprQuotedList missing
798 dupGenericInsts tc_inst_infos
799 = vcat [ptext SLIT("More than one type pattern for a single generic type constructor:"),
800 nest 4 (vcat (map ppr_inst_ty tc_inst_infos)),
801 ptext SLIT("All the type patterns for a generic type constructor must be identical")
804 ppr_inst_ty (tc,inst) = ppr tc <+> ppr (simpleInstInfoTy inst)
807 = ptext SLIT("Can't mix generic and non-generic equations for class method") <+> quotes (ppr op)