Como colocar restrições nos dados associados?
Gostaria de afirmar que os dados associados são sempre uma instância de uma determinada classe.
class (Context (Associated a b)) => Class a where
data Associated a :: * -> *
instance Context (Associated a b) where
func1 = error "func1"
No entanto, a variável livreb
que não está no escopo me impede disso. Uma das soluções é copiar funções de classe deContext
, mas parece feio.
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 uma maneira idiomática de colocar restrições no tipo de dados associado que tem variáveis não mencionadas na cabeça?
edit: Gostaria de manter a compatibilidade com o GHC 7.0.3