> > mapBox :: forall a b. (a -> b) -> Box -> Box
> > --            :: forall a b. (a -> b) -> (exists a.a) -> (exists a.a)
> > mapBox f (B x) = B (f x)
> >
> > However, at first sight |f| is polymorphic so it could be applied to
> > any value, included the value hidden in  |Box|.
>
> f is not polymorphic here; mapBox is.

I see, it's a case of not paying proper attention. I presume this will
reflect in the imposibility of introducing the forall when trying to
"prove" the type.

> Yes, but that is only because your Box type is trivial.  It can contain
> any value, so you can never extract any information from it.

Indeed, I was just trying to play with unconstrained existentials.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to