> 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.
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).
-- Lennart