
Peter Padawitz wrote:
I'd like to define several instances of the same type class with the same type variable instance. Only method instances differ. How can I do this without writing copies of the type class?
newtypes and modules have both been suggested. I have another suggestion: Don't! Don't use typeclasses. The only useful thing about typeclasses is that they are a kind of type-indexed family of dictionaries. If you don't want to use the type indexin, then don't use classes. Just use your own kind of dictionary. E.g., instead of: class Foo a where { bar :: a -> Int; baz :: a -> String } instance Foo Double ... instance Foo Double ... -- bother, I wanted a different Double instance! you should just have: data Foo a = Foo { bar :: a -> Int, baz :: a -> String } foo1 :: Foo Double foo1 = Foo { ... } foo2 :: Foo Double foo2 = Foo { ... } -- now I can have as many 'instances' for the same type as I want! Jules