_______________________________________________
Haskell-Cafe mailing list
Haskel...@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
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.
> * 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
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