Iavor S. Diatchki writes:
> > > test :: (forall t . (forall a . t a) -> t b) -> b -> b
> i am not an expert on this, but isnt this rank 3?
Might be. Does this mean I cannot write it in Haskell? But, with
data T a = C
I can write:
test' :: (forall t . (forall a . t a) -> t b) -> b -> b
test' g x = case g C of C -> x
Here, the type checker finds out on its own that t is instantiated to T. Still,
why are the annotations in the following code not enough to let it also accept
the definition of "test" (see my earlier message), respectively how can I tell
it that t should be instantiated to t c = forall d . (c->d) -> d -> d ?
test :: (forall t . (forall a . t a) -> t b) -> b -> b
test g x = (g :: (forall a . (forall d . (a->d) -> d -> d)) ->
(forall e . (b->e) -> e -> e))
((\f y -> y) :: (forall a . (forall d . (a->d) -> d -> d)))
(id :: (b -> b))
(x :: b)
--
Janis Voigtlaender
http://wwwtcs.inf.tu-dresden.de/~voigt/
mailto:[EMAIL PROTECTED]
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell