Как наложить ограничения на связанные данные?
Я хотел бы заявить, что связанные данные всегда являются экземпляром определенного класса.
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