¿Cómo poner restricciones a los datos asociados?
Me gustaría indicar que los datos asociados son siempre una instancia de una determinada clase.
class (Context (Associated a b)) => Class a where
data Associated a :: * -> *
instance Context (Associated a b) where
func1 = error "func1"
Sin embargo, la variable libreb
Eso no está en el alcance me impide esto. Una de las soluciones es copiar funciones de clase deContext
, pero se ve feo.
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
¿Existe una forma idiomática de poner restricciones en el tipo de datos asociado que tiene variables que no se mencionan en la cabeza?
Edición: me gustaría mantener la compatibilidad con GHC 7.0.3