X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Ftypes%2FClass.lhs;fp=ghc%2Fcompiler%2Ftypes%2FClass.lhs;h=d7d8146a4e3d392e8206f68278fb3242c62f8275;hb=710e207487929c4a5977b5ee3bc6e539091953db;hp=b3e47e415383d45756f8d3b123dcfdcfa32ca3fd;hpb=af099cc124dcb1c5cbb1166aed1177848540c3ab;p=ghc-hetmet.git diff --git a/ghc/compiler/types/Class.lhs b/ghc/compiler/types/Class.lhs index b3e47e4..d7d8146 100644 --- a/ghc/compiler/types/Class.lhs +++ b/ghc/compiler/types/Class.lhs @@ -6,6 +6,7 @@ \begin{code} module Class ( Class, ClassOpItem, ClassPred, ClassContext, FunDep, + DefMeth (..), mkClass, classTyVars, classArity, classKey, className, classSelIds, classTyCon, @@ -58,10 +59,14 @@ type ClassContext = [ClassPred] type FunDep a = ([a],[a]) -- e.g. class C a b c | a b -> c, a c -> b where ... -- Here fun-deps are [([a,b],[c]), ([a,c],[b])] -type ClassOpItem = (Id, -- Selector function; contains unfolding - Id, -- Default methods - Bool) -- True <=> an explicit default method was - -- supplied in the class decl +type ClassOpItem = (Id, DefMeth Id) + -- Selector function; contains unfolding + -- Default-method info + +data DefMeth id = NoDefMeth -- No default method + | DefMeth id -- A polymorphic default method (named id) + | GenDefMeth -- A generic default method + deriving Eq \end{code} The @mkClass@ function fills in the indirect superclasses. @@ -100,7 +105,7 @@ classArity clas = length (classTyVars clas) -- Could memoise this classSelIds (Class {classSCSels = sc_sels, classOpStuff = op_stuff}) - = sc_sels ++ [op_sel | (op_sel, _, _) <- op_stuff] + = sc_sels ++ [op_sel | (op_sel, _) <- op_stuff] classTvsFds c = (classTyVars c, classFunDeps c)