[Haskell-cafe] Help understanding type error

Stuart Cook scook0 at gmail.com
Fri Sep 7 22:24:10 EDT 2007


On 9/8/07, Ryan Ingram <ryani.spam at gmail.com> 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.)


Stuart


More information about the Haskell-Cafe mailing list