% But there are no types `(\x->x)' or `(\x->())' in Haskell.
% So the expression does not typecheck (at least that is
% my understanding of how it works).
% You might think that
% type I x = x
% and then using I alone would give you the type `(\x->x)',
% but partial application of type synonyms is not allowed,
% thus sidestepping the problem (thanks to Mark Jones for
% that little trick).
Are partial applications of data-types allowed then?
If not, the higher kinds would not make sense.
If they do, what kind of partial applications are allowed?
Just the data-type identifier without arguments, or is it possible
to use them curried (the kind (*->*)->*->* suggests currying).
The report has a pointer to a paper by Mark Jones, where this is
presumably explained. But I don't think pointing to papers is good
enough for a language definition. At least it should be clear from
the report what a type is.
Stefan Kahrs