Como colocar restrições nos dados associados?

Gostaria de afirmar que os dados associados são sempre uma instância de uma determinada classe.

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

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

No entanto, a variável livreb que não está no escopo me impede disso. Uma das soluções é copiar funções de classe deContext, mas parece feio.

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 uma maneira idiomática de colocar restrições no tipo de dados associado que tem variáveis ​​não mencionadas na cabeça?

edit: Gostaria de manter a compatibilidade com o GHC 7.0.3

questionAnswers(3)

yourAnswerToTheQuestion