I'd like to be able to declare the kinds of new types and synonyms, because sometimes Haskell can't infer them. For instance:
data CMap0 p q = MkCMap0; Without evidence, Haskell assumes that p and q have kind '*' (as per sec. 4.6), and therefore CMap0 has kind '* -> * -> *'. Actually, I wanted p and q to both have kind '* -> *', giving CMap0 kind '(* -> *) -> (* -> *) -> *'. Here's another example: type Composer c = forall x y z. (c y z) -> (c x y) -> (c x z); Haskell gives x, y and z all the kind '*'. But I wanted them to have kind '* -> *', giving c the kind '(* -> *) -> (* -> *) -> *' and Composer the kind '(* -> *) -> (* -> *) -> * -> *'. It's not currently possible to specify kinds, is it? Actually I think polymorphic kinds would be nice, but I can't say I desperately need them. I'd just like to be able to specify kinds somehow. For instance: data CMap0 (p ::: * -> *) (q ::: * -> *) = MkCMap0; ...or perhaps data ({* -> *} p,{* -> *} q) => CMap0 p q = MkCMap0; ...or whatever. -- Ashley Yakeley, Seattle WA _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell