Jak umieścić ograniczenia w powiązanych danych?
Chciałbym stwierdzić, że powiązane dane są zawsze instancją pewnej klasy.
class (Context (Associated a b)) => Class a where
data Associated a :: * -> *
instance Context (Associated a b) where
func1 = error "func1"
Jednak wolna zmiennab
który nie jest w zasięgu uniemożliwia mi to. Jednym z rozwiązań jest kopiowanie funkcji klasowych zContext
, ale wygląda brzydko.
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
Czy istnieje idiomatyczny sposób na nakładanie ograniczeń na powiązany typ danych, który ma zmienne nie wymienione w nagłówku?
edit: Chciałbym zachować zgodność z GHC 7.0.3