
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?

* 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?
Define the type class in a module named "MyClass". Define the each instance in a module named "MyInstanceX" where X is a version number. Include only the "MyInstanceX" module, you currently need.

Lutz Donnerhacke
* 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?
Define the type class in a module named "MyClass". Define the each instance in a module named "MyInstanceX" where X is a version number.
Include only the "MyInstanceX" module, you currently need.
Or, if you need more than one at the same time, wrap your data type in one newtype per instance. -k -- If I haven't seen further, it is by standing in the footprints of giants

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
participants (4)
-
Jules Bean
-
Ketil Malde
-
Lutz Donnerhacke
-
Peter Padawitz