¿Cómo poner restricciones a los datos asociados?

Me gustaría indicar que los datos asociados son siempre una instancia de una determinada clase.

class (Context (Associated a b)) => Class a where
  data Associated a :: * -> *

instance Context (Associated a b) where
  func1 = error "func1"

Sin embargo, la variable libreb Eso no está en el alcance me impide esto. Una de las soluciones es copiar funciones de clase deContext, pero se ve feo.

class Class a where
  data Associated a :: * -> *
  -- duplicate all functions from class Context
  contextFunc1 :: Associated a b -> String

instance Class a => Context (Associated a b) where
  func1 = contextFunc1

¿Existe una forma idiomática de poner restricciones en el tipo de datos asociado que tiene variables que no se mencionan en la cabeza?

Edición: me gustaría mantener la compatibilidad con GHC 7.0.3

Respuestas a la pregunta(3)

Su respuesta a la pregunta