Jak umieścić ograniczenia w powiązanych danych?

Chciałbym stwierdzić, że powiązane dane są zawsze instancją pewnej klasy.

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

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

Jednak wolna zmiennab który nie jest w zasięgu uniemożliwia mi to. Jednym z rozwiązań jest kopiowanie funkcji klasowych zContext, ale wygląda brzydko.

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

Czy istnieje idiomatyczny sposób na nakładanie ograniczeń na powiązany typ danych, który ma zmienne nie wymienione w nagłówku?

edit: Chciałbym zachować zgodność z GHC 7.0.3

questionAnswers(3)

yourAnswerToTheQuestion