[Haskell-cafe] Random thoughts about typeclasses

Ertugrul Soeylemez es at ertes.de
Mon May 16 14:58:40 CEST 2011

Robert Clausecker <fuzxxl at gmail.com> wrote:

> I found out, that GHC implements typeclasses as an extra argument, a
> record that stores all functions of the typeclass. So I was wondering,
> is there a way (apart from using newtype) to pass a custom record as
> the typeclass record, to modify the behavior of the typeclass? I
> thought about something like this:
>     f :: Show a => [a] -> String
>     f = (>>= show)
>     -- So, f becomes something like this?
>     __f :: ClassShow a -> [a] -> String
>     __f (ClassShow __show) x = x >>= __show
>     -- And if I call the function, it looks somewhat like this:
>     g :: [Int] -> String
>     g = f
>     __g = __f instanceShowInt
>     -- But is it possible to do something like this?
>     g2 = __f (ClassShow (return . fromEnum))
> Tis is just a random thought, some compilers like JHC implement them
> by another way. But would this theoretically be possible?

If I understand you right, you would like to decide about the instance
at run-time instead of at compile-time.  This is actually possible in
practice.  A suitable search term is "implicit configurations", in
particular "reification".


nightmare = unsafePerformIO (getWrongWife >>= sex)

More information about the Haskell-Cafe mailing list