[Haskell-cafe] Re: OO Design in Haskell Example (Draft)

apfelmus at quantentunnel.de apfelmus at quantentunnel.de
Mon Feb 26 05:35:28 EST 2007

Tim Docker wrote:
> Steve Downey wrote: 
>  > So, I've been working on a Composite example. I've used
>  > existential types to have a generic proxy to the base
>  > type, rather than a simple algebraic type, since adding
>  > new leaves to the algebraic type means modifying the whole
>  > type, a violation of the Open-Closed principle (open for
>  > extension, closed for modification)
> Rather than using existential types, a simple record of
> functions can be often be useful. ie:
> data Component = Component {
>     draw :: String
>     add  :: Component -> Component
> }
> It might be worth comparing this approach with the (more
> complex) one you have described.

The point about existential types is that every class like IComponent
that allow as useful existential like

  data Component =
    forall e.(IComponent e) => Component e

can be put into the record form Tim mentions. See the old wiki pages at


This is because every such IComponent has to look like

  class IComponent e where
    foo1 :: e -> ... -> e
    bar1 :: e -> ...

where the dots in "-> ..." must not contain the type variable e.


More information about the Haskell-Cafe mailing list