[Haskell-cafe] typeclass question

Tim Docker twd2 at dockerz.net
Thu Sep 11 06:18:30 EDT 2008


I have a typeclass related question that I have been puzzling over.

In a library I am working on, I have a series of functions for
converting values to Renderables:

| labelToRenderable :: Label -> Renderable
| legendToRenderable :: Legend -> Renderable
| axisToRenderable :: Axis v -> Renderable
| layoutToRenderable :: Layout x y -> Renderable

These names are overloaded for convenience via a typeclass:

| class ToRenderable a where
|   toRenderable :: a -> Renderable
|
| instance ToRenderable Label where
|   toRenderable = labelToRenderable
| ...

But some recent changes mean that Renderable needs to become a type
constructor, and the functions now product different types:

| labelToRenderable :: Label -> Renderable ()
| legendToRenderable :: Legend -> Renderable String
| axisToRenderable :: Axis v -> Renderable ()
| layoutToRenderable :: Layout x y a -> Renderable a

Is there a nice way to overload a "toRenderable" function for these?
Something like this is possible:

| class ToRenderable a b where
|   toRenderable :: a -> Renderable b

But the above is, I think, too general for my needs. I don't want
to be able to generate Renderables of different type b for a single input
type a.

Also, MPTC take me out of the world of haskell 98, which I was trying
to avoid. Am I missing something simple?

Any pointers would be much appreciated.

Tim




More information about the Haskell-Cafe mailing list