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