Как наложить ограничения на связанные данные?

Я хотел бы заявить, что связанные данные всегда являются экземпляром определенного класса.

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

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

Тем не менее, свободная переменнаяb это не по объему мешает мне от этого. Одним из решений является копирование функций класса изContext, но это выглядит некрасиво.

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

Есть ли идиоматический способ наложить ограничения на связанный тип данных, у которого есть переменные, не упомянутые в заголовке?

редактировать: я хотел бы сохранить совместимость с GHC 7.0.3

Ответы на вопрос(3)

Ваш ответ на вопрос