escape from existential quantification
Keith Wansbrough
Keith.Wansbrough@cl.cam.ac.uk
Thu, 27 Feb 2003 18:26:31 +0000
> 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?
The idea is to use a type more like this:
data Foo = forall a. Foo Int a (a -> (Int,Bool)) (a -> Int) (a -> Foo)
where the functions are the operations you want to use on the data. So now a list of Foos can contain data of many different types, as long as it is paired with the appropriate accessor functions for those types. You can use it like this:
case x of
Foo n x f g h -> if snd (f x) then g x else 0
for example.
--KW 8-)
--
Keith Wansbrough <kw217@cl.cam.ac.uk>
http://www.cl.cam.ac.uk/users/kw217/
University of Cambridge Computer Laboratory.