escape from existential quantification

George Russell ger@tzi.de
Thu, 27 Feb 2003 20:55:07 +0100


Wang Meng wrote
> I understand that existentially bound types cannot escape.
> 
> For example, say we have
> data Foo = forall a. Foo Int a
> 
> Then we cannot define a function
> extract (Foo i a) = a
> 
> However,this limitation makes it extremly difficult to program with local
> quantifications.Is there any way to by pass this?
It occasionally happens that I *know* what type is (or at least ought to be) inside
an existential type, but unfortunately GHC doesn't, and I need to get the value out.
This can be solved using dynamic types, for example you declare the datatype as

 > data Foo = forall a. Typeable a => Foo Int a

(or something like that), then you can extract the a value by going to Dynamic and back.