escape from existential quantification
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? -W-M- @ @ | \_/
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.
On Thu, 27 Feb 2003 18:26:31 +0000 Keith Wansbrough <Keith.Wansbrough@cl.cam.ac.uk> wrote:
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
Or else one can use type classes: ----- data Foo = forall a. Show a => Foo a instance Show Foo where show (Foo x) = show x main = print [Foo 3,Foo "ciao"] ----- Vincenzo -- Mai pensato a cosa vuol dire 10 anni di embargo? Si può chiedere ad una popolazione ormai allo stremo di subire un'altra guerra e magari un secondo embargo? Cosa c'entrano i bambini che muoiono di fame, di radiazioni e di mancanza di medicine con i giochi di potere di un dittatore? Che colpa ne portano? Leggere per esempio: http://www.fulviopoglio.com/salvi1.htm
participants (3)
-
Keith Wansbrough -
Nick Name -
Wang Meng