[project @ 2002-04-11 12:03:29 by simonpj]
[ghc-hetmet.git] / ghc / compiler / typecheck / TcClassDcl.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[TcClassDcl]{Typechecking class declarations}
5
6 \begin{code}
7 module TcClassDcl ( tcClassDecl1, tcClassDecls2, 
8                     tcMethodBind, mkMethodBind, badMethodErr
9                   ) where
10
11 #include "HsVersions.h"
12
13 import HsSyn            ( TyClDecl(..), Sig(..), MonoBinds(..),
14                           HsExpr(..), HsLit(..), 
15                           mkSimpleMatch, andMonoBinds, andMonoBindList, 
16                           isClassOpSig, isPragSig,
17                           getClassDeclSysNames, placeHolderType
18                         )
19 import BasicTypes       ( RecFlag(..), StrictnessMark(..) )
20 import RnHsSyn          ( RenamedTyClDecl, 
21                           RenamedClassOpSig, RenamedMonoBinds,
22                           maybeGenericMatch
23                         )
24 import TcHsSyn          ( TcMonoBinds )
25
26 import Inst             ( Inst, InstOrigin(..), LIE, emptyLIE, plusLIE, plusLIEs, 
27                           instToId, newDicts, newMethod )
28 import TcEnv            ( TyThingDetails(..), 
29                           tcLookupClass, tcExtendTyVarEnv2, 
30                           tcExtendTyVarEnv
31                         )
32 import TcBinds          ( tcMonoBinds )
33 import TcMonoType       ( TcSigInfo(..), tcHsType, tcHsTheta, mkTcSig )
34 import TcSimplify       ( tcSimplifyCheck )
35 import TcUnify          ( checkSigTyVars, sigCtxt )
36 import TcMType          ( tcInstTyVars )
37 import TcType           ( Type, TyVarDetails(..), TcType, TcThetaType, TcTyVar, 
38                           mkTyVarTys, mkPredTys, mkClassPred, 
39                           tcIsTyVarTy, tcSplitTyConApp_maybe
40                         )
41 import TcMonad
42 import Generics         ( mkGenericRhs )
43 import PrelInfo         ( nO_METHOD_BINDING_ERROR_ID )
44 import Class            ( classTyVars, classBigSig, classTyCon, 
45                           Class, ClassOpItem, DefMeth (..) )
46 import TyCon            ( tyConGenInfo )
47 import MkId             ( mkDictSelId, mkDataConId, mkDataConWrapId, mkDefaultMethodId )
48 import DataCon          ( mkDataCon )
49 import Id               ( Id, idType, idName, setIdLocalExported )
50 import Module           ( Module )
51 import Name             ( Name, NamedThing(..) )
52 import NameEnv          ( NameEnv, lookupNameEnv, emptyNameEnv, unitNameEnv, plusNameEnv )
53 import NameSet          ( emptyNameSet )
54 import Outputable
55 import Var              ( TyVar )
56 import CmdLineOpts
57 import UnicodeUtil      ( stringToUtf8 )
58 import ErrUtils         ( dumpIfSet )
59 import Util             ( count, lengthIs, equalLength )
60 import Maybes           ( seqMaybe )
61 import Maybe            ( isJust )
62 \end{code}
63
64
65
66 Dictionary handling
67 ~~~~~~~~~~~~~~~~~~~
68 Every class implicitly declares a new data type, corresponding to dictionaries
69 of that class. So, for example:
70
71         class (D a) => C a where
72           op1 :: a -> a
73           op2 :: forall b. Ord b => a -> b -> b
74
75 would implicitly declare
76
77         data CDict a = CDict (D a)      
78                              (a -> a)
79                              (forall b. Ord b => a -> b -> b)
80
81 (We could use a record decl, but that means changing more of the existing apparatus.
82 One step at at time!)
83
84 For classes with just one superclass+method, we use a newtype decl instead:
85
86         class C a where
87           op :: forallb. a -> b -> b
88
89 generates
90
91         newtype CDict a = CDict (forall b. a -> b -> b)
92
93 Now DictTy in Type is just a form of type synomym: 
94         DictTy c t = TyConTy CDict `AppTy` t
95
96 Death to "ExpandingDicts".
97
98
99 %************************************************************************
100 %*                                                                      *
101 \subsection{Type checking}
102 %*                                                                      *
103 %************************************************************************
104
105 \begin{code}
106
107 tcClassDecl1 :: RenamedTyClDecl -> TcM (Name, TyThingDetails)
108 tcClassDecl1 (ClassDecl {tcdCtxt = context, tcdName = class_name,
109                          tcdTyVars = tyvar_names, tcdFDs = fundeps,
110                          tcdSigs = class_sigs, tcdMeths = def_methods,
111                          tcdSysNames = sys_names, tcdLoc = src_loc})
112   =     -- LOOK THINGS UP IN THE ENVIRONMENT
113     tcLookupClass class_name                            `thenTc` \ clas ->
114     let
115         tyvars   = classTyVars clas
116         op_sigs  = filter isClassOpSig class_sigs
117         op_names = [n | ClassOpSig n _ _ _ <- op_sigs]
118         (_, datacon_name, datacon_wkr_name, sc_sel_names) = getClassDeclSysNames sys_names
119     in
120     tcExtendTyVarEnv tyvars                             $ 
121
122     checkDefaultBinds clas op_names def_methods   `thenTc` \ mb_dm_env ->
123         
124         -- CHECK THE CONTEXT
125         -- The renamer has already checked that the context mentions
126         -- only the type variable of the class decl.
127         -- Context is already kind-checked
128     ASSERT( equalLength context sc_sel_names )
129     tcHsTheta context                                   `thenTc` \ sc_theta ->
130
131         -- CHECK THE CLASS SIGNATURES,
132     mapTc (tcClassSig clas tyvars mb_dm_env) op_sigs    `thenTc` \ sig_stuff ->
133
134         -- MAKE THE CLASS DETAILS
135     let
136         (op_tys, op_items) = unzip sig_stuff
137         sc_tys             = mkPredTys sc_theta
138         dict_component_tys = sc_tys ++ op_tys
139         sc_sel_ids         = [mkDictSelId sc_name clas | sc_name <- sc_sel_names]
140
141         dict_con = mkDataCon datacon_name
142                              [NotMarkedStrict | _ <- dict_component_tys]
143                              [{- No labelled fields -}]
144                              tyvars
145                              [{-No context-}]
146                              [{-No existential tyvars-}] [{-Or context-}]
147                              dict_component_tys
148                              (classTyCon clas)
149                              dict_con_id dict_wrap_id
150
151         dict_con_id  = mkDataConId datacon_wkr_name dict_con
152         dict_wrap_id = mkDataConWrapId dict_con
153     in
154     returnTc (class_name, ClassDetails sc_theta sc_sel_ids op_items dict_con)
155 \end{code}
156
157 \begin{code}
158 checkDefaultBinds :: Class -> [Name] -> Maybe RenamedMonoBinds
159                   -> TcM (Maybe (NameEnv Bool))
160         -- The returned environment says
161         --      x not in env => no default method
162         --      x -> True    => generic default method
163         --      x -> False   => polymorphic default method
164
165   -- Check default bindings
166   --    a) must be for a class op for this class
167   --    b) must be all generic or all non-generic
168   -- and return a mapping from class-op to DefMeth info
169
170   -- But do all this only for source binds
171
172 checkDefaultBinds clas ops Nothing
173   = returnTc Nothing
174
175 checkDefaultBinds clas ops (Just mbs)
176   = go mbs      `thenTc` \ dm_env ->
177     returnTc (Just dm_env)
178   where
179     go EmptyMonoBinds = returnTc emptyNameEnv
180
181     go (AndMonoBinds b1 b2)
182       = go b1   `thenTc` \ dm_info1 ->
183         go b2   `thenTc` \ dm_info2 ->
184         returnTc (dm_info1 `plusNameEnv` dm_info2)
185
186     go (FunMonoBind op _ matches loc)
187       = tcAddSrcLoc loc                                 $
188
189         -- Check that the op is from this class
190         checkTc (op `elem` ops) (badMethodErr clas op)          `thenTc_`
191
192         -- Check that all the defns ar generic, or none are
193         checkTc (all_generic || none_generic) (mixedGenericErr op)      `thenTc_`
194
195         returnTc (unitNameEnv op all_generic)
196       where
197         n_generic    = count (isJust . maybeGenericMatch) matches
198         none_generic = n_generic == 0
199         all_generic  = matches `lengthIs` n_generic
200 \end{code}
201
202
203 \begin{code}
204 tcClassSig :: Class                     -- ...ditto...
205            -> [TyVar]                   -- The class type variable, used for error check only
206            -> Maybe (NameEnv Bool)      -- Info about default methods; 
207                                         --      Nothing => imported class defn with no method binds
208            -> RenamedClassOpSig
209            -> TcM (Type,                -- Type of the method
210                      ClassOpItem)       -- Selector Id, default-method Id, True if explicit default binding
211
212 -- This warrants an explanation: we need to separate generic
213 -- default methods and default methods later on in the compiler
214 -- so we distinguish them in checkDefaultBinds, and pass this knowledge in the
215 -- Class.DefMeth data structure. 
216
217 tcClassSig clas clas_tyvars maybe_dm_env
218            (ClassOpSig op_name sig_dm op_ty src_loc)
219   = tcAddSrcLoc src_loc $
220
221         -- Check the type signature.  NB that the envt *already has*
222         -- bindings for the type variables; see comments in TcTyAndClassDcls.
223     tcHsType op_ty                      `thenTc` \ local_ty ->
224
225     let
226         theta = [mkClassPred clas (mkTyVarTys clas_tyvars)]
227
228         -- Build the selector id and default method id
229         sel_id = mkDictSelId op_name clas
230         DefMeth dm_name = sig_dm
231
232         dm_info = case maybe_dm_env of
233                     Nothing     -> sig_dm
234                     Just dm_env -> mk_src_dm_info dm_env
235
236         mk_src_dm_info dm_env = case lookupNameEnv dm_env op_name of
237                                    Nothing    -> NoDefMeth
238                                    Just True  -> GenDefMeth
239                                    Just False -> DefMeth dm_name
240     in
241     returnTc (local_ty, (sel_id, dm_info))
242 \end{code}
243
244
245 %************************************************************************
246 %*                                                                      *
247 \subsection[Default methods]{Default methods}
248 %*                                                                      *
249 %************************************************************************
250
251 The default methods for a class are each passed a dictionary for the
252 class, so that they get access to the other methods at the same type.
253 So, given the class decl
254 \begin{verbatim}
255 class Foo a where
256         op1 :: a -> Bool
257         op2 :: Ord b => a -> b -> b -> b
258
259         op1 x = True
260         op2 x y z = if (op1 x) && (y < z) then y else z
261 \end{verbatim}
262 we get the default methods:
263 \begin{verbatim}
264 defm.Foo.op1 :: forall a. Foo a => a -> Bool
265 defm.Foo.op1 = /\a -> \dfoo -> \x -> True
266
267 defm.Foo.op2 :: forall a. Foo a => forall b. Ord b => a -> b -> b -> b
268 defm.Foo.op2 = /\ a -> \ dfoo -> /\ b -> \ dord -> \x y z ->
269                   if (op1 a dfoo x) && (< b dord y z) then y else z
270 \end{verbatim}
271
272 When we come across an instance decl, we may need to use the default
273 methods:
274 \begin{verbatim}
275 instance Foo Int where {}
276 \end{verbatim}
277 gives
278 \begin{verbatim}
279 const.Foo.Int.op1 :: Int -> Bool
280 const.Foo.Int.op1 = defm.Foo.op1 Int dfun.Foo.Int
281
282 const.Foo.Int.op2 :: forall b. Ord b => Int -> b -> b -> b
283 const.Foo.Int.op2 = defm.Foo.op2 Int dfun.Foo.Int
284
285 dfun.Foo.Int :: Foo Int
286 dfun.Foo.Int = (const.Foo.Int.op1, const.Foo.Int.op2)
287 \end{verbatim}
288 Notice that, as with method selectors above, we assume that dictionary
289 application is curried, so there's no need to mention the Ord dictionary
290 in const.Foo.Int.op2 (or the type variable).
291
292 \begin{verbatim}
293 instance Foo a => Foo [a] where {}
294
295 dfun.Foo.List :: forall a. Foo a -> Foo [a]
296 dfun.Foo.List
297   = /\ a -> \ dfoo_a ->
298     let rec
299         op1 = defm.Foo.op1 [a] dfoo_list
300         op2 = defm.Foo.op2 [a] dfoo_list
301         dfoo_list = (op1, op2)
302     in
303         dfoo_list
304 \end{verbatim}
305
306 The function @tcClassDecls2@ just arranges to apply @tcClassDecl2@ to
307 each local class decl.
308
309 \begin{code}
310 tcClassDecls2 :: Module -> [RenamedTyClDecl] -> NF_TcM (LIE, TcMonoBinds, [Id])
311
312 tcClassDecls2 this_mod decls
313   = foldr combine
314           (returnNF_Tc (emptyLIE, EmptyMonoBinds, []))
315           [tcClassDecl2 cls_decl | cls_decl@(ClassDecl {tcdMeths = Just _}) <- decls] 
316                 -- The 'Just' picks out source ClassDecls
317   where
318     combine tc1 tc2 = tc1 `thenNF_Tc` \ (lie1, binds1, ids1) ->
319                       tc2 `thenNF_Tc` \ (lie2, binds2, ids2) ->
320                       returnNF_Tc (lie1 `plusLIE` lie2,
321                                    binds1 `AndMonoBinds` binds2,
322                                    ids1 ++ ids2)
323 \end{code}
324
325 @tcClassDecl2@ generates bindings for polymorphic default methods
326 (generic default methods have by now turned into instance declarations)
327
328 \begin{code}
329 tcClassDecl2 :: RenamedTyClDecl         -- The class declaration
330              -> NF_TcM (LIE, TcMonoBinds, [Id])
331
332 tcClassDecl2 (ClassDecl {tcdName = class_name, tcdSigs = sigs, 
333                          tcdMeths = Just default_binds, tcdLoc = src_loc})
334   =     -- The 'Just' picks out source ClassDecls
335     recoverNF_Tc (returnNF_Tc (emptyLIE, EmptyMonoBinds, [])) $ 
336     tcAddSrcLoc src_loc                                   $
337     tcLookupClass class_name                              `thenNF_Tc` \ clas ->
338
339         -- We make a separate binding for each default method.
340         -- At one time I used a single AbsBinds for all of them, thus
341         -- AbsBind [d] [dm1, dm2, dm3] { dm1 = ...; dm2 = ...; dm3 = ... }
342         -- But that desugars into
343         --      ds = \d -> (..., ..., ...)
344         --      dm1 = \d -> case ds d of (a,b,c) -> a
345         -- And since ds is big, it doesn't get inlined, so we don't get good
346         -- default methods.  Better to make separate AbsBinds for each
347     let
348         (tyvars, _, _, op_items) = classBigSig clas
349         prags                    = filter isPragSig sigs
350         tc_dm                    = tcDefMeth clas tyvars default_binds prags
351     in
352     mapAndUnzip3Tc tc_dm op_items       `thenTc` \ (defm_binds, const_lies, dm_ids_s) ->
353
354     returnTc (plusLIEs const_lies, andMonoBindList defm_binds, concat dm_ids_s)
355     
356
357 tcDefMeth clas tyvars binds_in prags (_, NoDefMeth)  = returnTc (EmptyMonoBinds, emptyLIE, [])
358 tcDefMeth clas tyvars binds_in prags (_, GenDefMeth) = returnTc (EmptyMonoBinds, emptyLIE, [])
359         -- Generate code for polymorphic default methods only
360         -- (Generic default methods have turned into instance decls by now.)
361         -- This is incompatible with Hugs, which expects a polymorphic 
362         -- default method for every class op, regardless of whether or not 
363         -- the programmer supplied an explicit default decl for the class.  
364         -- (If necessary we can fix that, but we don't have a convenient Id to hand.)
365
366 tcDefMeth clas tyvars binds_in prags op_item@(sel_id, DefMeth dm_name)
367   = tcInstTyVars ClsTv tyvars           `thenNF_Tc` \ (clas_tyvars, inst_tys, _) ->
368     let
369         dm_ty = idType sel_id   -- Same as dict selector!
370           -- The default method's type should really come from the
371           -- iface file, since it could be usage-generalised, but this
372           -- requires altering the mess of knots in TcModule and I'm
373           -- too scared to do that.  Instead, I have disabled generalisation
374           -- of types of default methods (and dict funs) by annotating them
375           -- TyGenNever (in MkId).  Ugh!  KSW 1999-09.
376
377         theta       = [mkClassPred clas inst_tys]
378         dm_id       = mkDefaultMethodId dm_name dm_ty
379         local_dm_id = setIdLocalExported dm_id
380                 -- Reason for setIdLocalExported: see notes with MkId.mkDictFunId
381         xtve = tyvars `zip` clas_tyvars
382     in
383     newDicts origin theta                               `thenNF_Tc` \ [this_dict] ->
384
385     mkMethodBind origin clas inst_tys binds_in op_item  `thenTc` \ (dm_inst, meth_info) ->
386     tcMethodBind xtve clas_tyvars theta 
387                  [this_dict] meth_info                  `thenTc` \ (defm_bind, insts_needed) ->
388     
389     tcAddErrCtxt (defltMethCtxt clas) $
390     
391         -- Check the context
392     tcSimplifyCheck
393         (ptext SLIT("class") <+> ppr clas)
394         clas_tyvars
395         [this_dict]
396         insts_needed                    `thenTc` \ (const_lie, dict_binds) ->
397
398         -- Simplification can do unification
399     checkSigTyVars clas_tyvars          `thenTc` \ clas_tyvars' ->
400     
401     let
402         full_bind = AbsBinds
403                     clas_tyvars'
404                     [instToId this_dict]
405                     [(clas_tyvars', local_dm_id, instToId dm_inst)]
406                     emptyNameSet        -- No inlines (yet)
407                     (dict_binds `andMonoBinds` defm_bind)
408     in
409     returnTc (full_bind, const_lie, [dm_id])
410   where
411     origin = ClassDeclOrigin
412 \end{code}
413
414     
415
416 %************************************************************************
417 %*                                                                      *
418 \subsection{Typechecking a method}
419 %*                                                                      *
420 %************************************************************************
421
422 @tcMethodBind@ is used to type-check both default-method and
423 instance-decl method declarations.  We must type-check methods one at a
424 time, because their signatures may have different contexts and
425 tyvar sets.
426
427 \begin{code}
428 tcMethodBind 
429         :: [(TyVar,TcTyVar)]    -- Bindings for type environment
430         -> [TcTyVar]            -- Instantiated type variables for the
431                                 --      enclosing class/instance decl. 
432                                 --      They'll be signature tyvars, and we
433                                 --      want to check that they don't get bound
434                                 -- Always equal the range of the type envt
435         -> TcThetaType          -- Available theta; it's just used for the error message
436         -> [Inst]               -- Available from context, used to simplify constraints 
437                                 --      from the method body
438         -> (Id, TcSigInfo, RenamedMonoBinds)    -- Details of this method
439         -> TcM (TcMonoBinds, LIE)
440
441 tcMethodBind xtve inst_tyvars inst_theta avail_insts
442              (sel_id, meth_sig, meth_bind)
443   =  
444         -- Check the bindings; first adding inst_tyvars to the envt
445         -- so that we don't quantify over them in nested places
446      tcExtendTyVarEnv2 xtve (
447         tcAddErrCtxt (methodCtxt sel_id)                $
448         tcMonoBinds meth_bind [meth_sig] NonRecursive
449      )                                                  `thenTc` \ (meth_bind, meth_lie, _, _) ->
450
451         -- Now do context reduction.   We simplify wrt both the local tyvars
452         -- and the ones of the class/instance decl, so that there is
453         -- no problem with
454         --      class C a where
455         --        op :: Eq a => a -> b -> a
456         --
457         -- We do this for each method independently to localise error messages
458
459      let
460         TySigInfo meth_id meth_tvs meth_theta _ local_meth_id _ _ = meth_sig
461      in
462      tcAddErrCtxtM (sigCtxt sel_id inst_tyvars inst_theta (idType meth_id))     $
463      newDicts SignatureOrigin meth_theta                `thenNF_Tc` \ meth_dicts ->
464      let
465         all_tyvars = meth_tvs ++ inst_tyvars
466         all_insts  = avail_insts ++ meth_dicts
467      in
468      tcSimplifyCheck
469          (ptext SLIT("class or instance method") <+> quotes (ppr sel_id))
470          all_tyvars all_insts meth_lie                  `thenTc` \ (lie, lie_binds) ->
471
472      checkSigTyVars all_tyvars                          `thenTc` \ all_tyvars' ->
473
474      let
475         meth_tvs'      = take (length meth_tvs) all_tyvars'
476         poly_meth_bind = AbsBinds meth_tvs'
477                                   (map instToId meth_dicts)
478                                   [(meth_tvs', meth_id, local_meth_id)]
479                                   emptyNameSet  -- Inlines?
480                                   (lie_binds `andMonoBinds` meth_bind)
481      in
482      returnTc (poly_meth_bind, lie)
483
484
485 mkMethodBind :: InstOrigin
486              -> Class -> [TcType]       -- Class and instance types
487              -> RenamedMonoBinds        -- Method binding (pick the right one from in here)
488              -> ClassOpItem
489              -> TcM (Inst,              -- Method inst
490                      (Id,                       -- Global selector Id
491                       TcSigInfo,                -- Signature 
492                       RenamedMonoBinds))        -- Binding for the method
493
494 mkMethodBind origin clas inst_tys meth_binds (sel_id, dm_info)
495   = tcGetSrcLoc                         `thenNF_Tc` \ loc -> 
496     newMethod origin sel_id inst_tys    `thenNF_Tc` \ meth_inst ->
497     let
498         meth_id    = instToId meth_inst
499         meth_name  = idName meth_id
500     in
501         -- Figure out what method binding to use
502         -- If the user suppplied one, use it, else construct a default one
503     (case find_bind (idName sel_id) meth_name meth_binds of
504         Just user_bind -> returnTc user_bind 
505         Nothing        -> mkDefMethRhs origin clas inst_tys sel_id loc dm_info  `thenTc` \ rhs ->
506                           returnTc (FunMonoBind meth_name False -- Not infix decl
507                                                 [mkSimpleMatch [] rhs placeHolderType loc] loc)
508     )                                                           `thenTc` \ meth_bind ->
509
510     mkTcSig meth_id loc                 `thenNF_Tc` \ meth_sig ->
511
512     returnTc (meth_inst, (sel_id, meth_sig, meth_bind))
513     
514
515      -- The user didn't supply a method binding, 
516      -- so we have to make up a default binding
517      -- The RHS of a default method depends on the default-method info
518 mkDefMethRhs origin clas inst_tys sel_id loc (DefMeth dm_name)
519   =  -- An polymorphic default method
520     returnTc (HsVar dm_name)
521
522 mkDefMethRhs origin clas inst_tys sel_id loc NoDefMeth
523   =     -- No default method
524         -- Warn only if -fwarn-missing-methods
525     doptsTc Opt_WarnMissingMethods              `thenNF_Tc` \ warn -> 
526     warnTc (isInstDecl origin && warn)
527            (omittedMethodWarn sel_id)           `thenNF_Tc_`
528     returnTc error_rhs
529   where
530     error_rhs = HsApp (HsVar (getName nO_METHOD_BINDING_ERROR_ID)) 
531                       (HsLit (HsStringPrim (_PK_ (stringToUtf8 error_msg))))
532     error_msg = showSDoc (hcat [ppr loc, text "|", ppr sel_id ])
533
534
535 mkDefMethRhs origin clas inst_tys sel_id loc GenDefMeth 
536   =     -- A generic default method
537         -- If the method is defined generically, we can only do the job if the
538         -- instance declaration is for a single-parameter type class with
539         -- a type constructor applied to type arguments in the instance decl
540         --      (checkTc, so False provokes the error)
541      ASSERT( isInstDecl origin )        -- We never get here from a class decl
542
543      checkTc (isJust maybe_tycon)
544              (badGenericInstance sel_id (notSimple inst_tys))   `thenTc_`
545      checkTc (isJust (tyConGenInfo tycon))
546              (badGenericInstance sel_id (notGeneric tycon))                     `thenTc_`
547
548      ioToTc (dumpIfSet opt_PprStyle_Debug "Generic RHS" stuff)  `thenNF_Tc_`
549      returnTc rhs
550   where
551     rhs = mkGenericRhs sel_id clas_tyvar tycon
552
553     stuff = vcat [ppr clas <+> ppr inst_tys,
554                   nest 4 (ppr sel_id <+> equals <+> ppr rhs)]
555
556           -- The tycon is only used in the generic case, and in that
557           -- case we require that the instance decl is for a single-parameter
558           -- type class with type variable arguments:
559           --    instance (...) => C (T a b)
560     clas_tyvar    = head (classTyVars clas)
561     Just tycon    = maybe_tycon
562     maybe_tycon   = case inst_tys of 
563                         [ty] -> case tcSplitTyConApp_maybe ty of
564                                   Just (tycon, arg_tys) | all tcIsTyVarTy arg_tys -> Just tycon
565                                   other                                           -> Nothing
566                         other -> Nothing
567
568 isInstDecl InstanceDeclOrigin = True
569 isInstDecl ClassDeclOrigin    = False
570 \end{code}
571
572
573 \begin{code}
574 -- The renamer just puts the selector ID as the binder in the method binding
575 -- but we must use the method name; so we substitute it here.  Crude but simple.
576 find_bind sel_name meth_name (FunMonoBind op_name fix matches loc)
577     | op_name == sel_name = Just (FunMonoBind meth_name fix matches loc)
578 find_bind sel_name meth_name (AndMonoBinds b1 b2)
579     = find_bind sel_name meth_name b1 `seqMaybe` find_bind sel_name meth_name b2
580 find_bind sel_name meth_name other  = Nothing   -- Default case
581
582  -- Find the prags for this method, and replace the
583  -- selector name with the method name
584 find_prags sel_name meth_name [] = []
585 find_prags sel_name meth_name (SpecSig name ty loc : prags) 
586      | name == sel_name = SpecSig meth_name ty loc : find_prags sel_name meth_name prags
587 find_prags sel_name meth_name (InlineSig sense name phase loc : prags)
588    | name == sel_name = InlineSig sense meth_name phase loc : find_prags sel_name meth_name prags
589 find_prags sel_name meth_name (prag:prags) = find_prags sel_name meth_name prags
590 \end{code}
591
592
593 Contexts and errors
594 ~~~~~~~~~~~~~~~~~~~
595 \begin{code}
596 defltMethCtxt clas
597   = ptext SLIT("When checking the default methods for class") <+> quotes (ppr clas)
598
599 methodCtxt sel_id
600   = ptext SLIT("In the definition for method") <+> quotes (ppr sel_id)
601
602 badMethodErr clas op
603   = hsep [ptext SLIT("Class"), quotes (ppr clas), 
604           ptext SLIT("does not have a method"), quotes (ppr op)]
605
606 omittedMethodWarn sel_id
607   = ptext SLIT("No explicit method nor default method for") <+> quotes (ppr sel_id)
608
609 badGenericInstance sel_id because
610   = sep [ptext SLIT("Can't derive generic code for") <+> quotes (ppr sel_id),
611          because]
612
613 notSimple inst_tys
614   = vcat [ptext SLIT("because the instance type(s)"), 
615           nest 2 (ppr inst_tys),
616           ptext SLIT("is not a simple type of form (T a b c)")]
617
618 notGeneric tycon
619   = vcat [ptext SLIT("because the instance type constructor") <+> quotes (ppr tycon) <+> 
620           ptext SLIT("was not compiled with -fgenerics")]
621
622 mixedGenericErr op
623   = ptext SLIT("Can't mix generic and non-generic equations for class method") <+> quotes (ppr op)
624 \end{code}