module Class (
Class, ClassOpItem, ClassPred, ClassContext, FunDep,
- mkClass, classTyVars,
+ mkClass, classTyVars, classArity,
classKey, className, classSelIds, classTyCon,
classBigSig, classExtraBigSig, classTvsFds
) where
import Var ( Id, TyVar )
import Name ( NamedThing(..), Name )
+import BasicTypes ( Arity )
import Unique ( Unique, Uniquable(..) )
import Outputable
import Util
mkClass :: Name -> [TyVar]
-> [([TyVar], [TyVar])]
-> [(Class,[Type])] -> [Id]
- -> [(Id, Id, Bool)]
+ -> [ClassOpItem]
-> TyCon
-> Class
The rest of these functions are just simple selectors.
\begin{code}
+classArity :: Class -> Arity
+classArity clas = length (classTyVars clas)
+ -- Could memoise this
+
classSelIds (Class {classSCSels = sc_sels, classOpStuff = op_stuff})
= sc_sels ++ [op_sel | (op_sel, _, _) <- op_stuff]