%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 ap
| The new Haskell report 1.3 (preliminary) allows type variables of
| other kinds than *, e.g. it gives the example (page 51)
|
| data App f a = A (f a)
|
| where the type variable f has kind *->*, and App has (*->*)->*->*.
|
| My problem is that I haven't seen (in the report) any mentio
> data App f a = A (f a)
...
> Take for instance the declaration:
> something = A ()
> what is the type of something ?
> It could be App (\x->x) (), but it could also be
> App (\x->()) a, for any type a, and a few others.
But there are no types `(\x->x)' or `(\x->())' in Haskell.