
Benjamin Franksen wrote:
On Tuesday 16 August 2005 21:56, Keean Schupke wrote:
You can even use existential types to create lists of things with a common interface, where you do not know in advance what types you may need:
data XWrap = XWrap (forall a . Show a => a) type ListXWrap = [XWrap]
You probably meant to write
data XWrap = forall a . Show a => XWrap a
or, in GADT style (which I find a bit more intuitive here):
data XWrap where XWrap :: Show a => a -> XWrap
Yes I always get confused by the notation Haskell uses... I used explicit universal quantification by mistake. I tried to think logically about the encapsulation existential types represent - and got the wrong form. I for one would like to see the use of 'exists' as a keyword for existential types, after all different symbols are used in modal logic (upside-down-A for forall, and backwards-E for exists). Regards, Keean.