Wie kann man die zugehörigen Daten einschränken?

Ich möchte darauf hinweisen, dass die zugehörigen Daten immer eine Instanz einer bestimmten Klasse sind.

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

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

Die freie Variable jedochb das ist nicht im umfang hindert mich daran. Eine der Lösungen besteht darin, Klassenfunktionen von zu kopierenContext, aber es sieht hässlich aus.

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

Gibt es eine idiomatische Möglichkeit, Einschränkungen für den zugeordneten Datentyp festzulegen, bei dem Variablen nicht in head erwähnt werden?

edit: Ich möchte die Kompatibilität mit GHC 7.0.3 behalten

Antworten auf die Frage(3)

Ihre Antwort auf die Frage