¿Cómo anula las instancias de clase de tipo Haskell proporcionadas por el código del paquete?

Tengo un código antiguo de Haskell que incluye casos de prueba QuickCheck. Las versiones más recientes de QuickCheck (que acabo de actualizar a 2.4.0.1) incluyen instancias de clase de tipo paraArbitrary Word8 y otros. Estos no existían en versiones anteriores 2.0.x de Test.QuickCheck.Arbitrary.

Mientras útil en el sentido general, el paquete proporcionadoArbitrary Word8 generador no es el que quiero usar para mi conjunto de pruebas:

instance Arbitrary Word8 where
  arbitrary = frequency [(2, oneof [return ctrlFrameDelim, return ctrlEscape, return ctrlXon, return ctrlXoff]),
                         (8, choose (0, 255))]

El código anterior provoca un error de declaración de instancia duplicada en tiempo de compilación. Puedo sacar este código y seguir adelante con el generador predeterminado, pero me gustaría saber la forma correcta de resolver esto.

Una posible solución que he considerado (pero no probado) es el aliasWord8 utilizandonewtype. Eso provocaría muchos cambios en toda la fuente, así que espero que haya una forma más limpia.

EDIT: Como se menciona en los comentarios a continuación, la respuesta aceptada fue muy limpia y fácil de implementar:

newtype EncodedByte = EncodedByte Word8

instance Arbitrary EncodedByte where
  arbitrary = liftM EncodedByte $ frequency [(2, elements [ctrlFrameDelim, ctrlEscape, ctrlXon, ctrlXoff]),
                                             (8, choose (0, 255))]

Respuestas a la pregunta(1)

Su respuesta a la pregunta