Derek Elkins wrote: > On Sat, 2007-09-08 at 12:24 +1000, Stuart Cook wrote: >> On 9/8/07, Ryan Ingram <[EMAIL PROTECTED]> wrote: >> > This does what you want, I think: >> > >> > {-# LANGUAGE ExistentialQuantification #-} >> > module Exist where >> > >> > data Showable = forall a. (Show a) => Showable a >> > instance Show Showable where >> > showsPrec p (Showable a) = showsPrec p a >> > show (Showable a) = show a >> > -- You have to use the default implementation of showList >> > -- because a list could be heterogeneous >> > >> > data T a = forall b. (Show b) => T b a >> > >> > extShow :: T a -> Showable >> > extShow (T b _) = Showable b >> >> Wow, I'm impressed! Making the existential wrapper an instance of its >> own typeclass solves quite a few problems. >> >> While the idiom is obvious in hindsight, I don't think I've seen it >> documented before. (Looking around just now I found some oblique >> references to the technique, but nothing that really called attention >> to itself.) > > It's documented on the old wiki... and in the papers that introduce > local existential types I believe.
E.g. http://citeseer.ist.psu.edu/aufer95type.html, this is where I first read about it. Cheers Ben _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe