Hello,

This post is (hopefully) literate Haskell.  I recently noticed that there are two ways to specify instances in a common situation.  Suppose I have something like this:

> {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, NoMonomorphismRestriction, OverlappingInstances #-}
> data A = A
> data B = B
> data C = C
> newtype Repr a = Repr { unRepr :: State MyState a }
> class SomeClass a b where

If I want to make instances of SomeClass for Repr, A and Repr, B, I have two choices:

> instance SomeClass Repr A where
> instance SomeClass Repr B where
>

or I can introduce a new class and make an instance with a context,

> class RClass c where
> instance RClass A where
> instance RClass B where
> -- no C instance for RClass
> instance RClass x => SomeClass Repr x

is there any reason to prefer one form over the other?  Of course the first requires more instance declarations, but they're auto-generated so that doesn't bother me.

Thanks,
John L.