- classTyVars :: [TyVar], -- The class type variables
- classFunDeps :: [FunDep TyVar], -- The functional dependencies
-
- classSCTheta :: [PredType], -- Immediate superclasses, and the
- classSCSels :: [Id], -- corresponding selector functions to
- -- extract them from a dictionary of this
- -- class
-
- classOpStuff :: [ClassOpItem], -- Ordered by tag
-
- classTyCon :: TyCon -- The data type constructor for dictionaries
- } -- of this class
-
-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])]
+ classTyVars :: [TyVar], -- The class type variables
+ classFunDeps :: [FunDep TyVar], -- The functional dependencies
+
+ -- Superclasses: eg: (F a ~ b, F b ~ G a, Eq a, Show b)
+ -- We need value-level selectors for the dictionary
+ -- superclasses, but not for the equality superclasses
+ classSCTheta :: [PredType], -- Immediate superclasses,
+ --- *with equalities first*
+ classSCNEqs :: Int, -- How many equalities
+ classSCSels :: [Id], -- Selector functions to extract the
+ -- *dictionary* superclasses from a
+ -- dictionary of this class
+ -- Associated types
+ classATs :: [TyCon], -- Associated type families
+
+ -- Class operations
+ classOpStuff :: [ClassOpItem], -- Ordered by tag
+
+ classTyCon :: TyCon -- The data type constructor for
+ -- dictionaries of this class
+ }
+
+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])]