Jestem tylko ciekaw, dlaczego muszę to napisać,wyjaśnienie dla "nielegalne typu synonim rodziny"
instance (HzMonad , Data.Suitable.Suitable α, γ ~ ExprTyp α) => VarDecl γ where
var = varhz
zamiast tego
instance (HzMonad , Data.Suitable.Suitable α) => VarDecl (ExprTyp α) where
var = varhz
-- error
Hz2/Language.hs:114:53:
Illegal type synonym family application in instance: ExprTyp α
In the instance declaration for `VarDecl (ExprTyp α)'
gdzie
varhz ::
(HzMonad , Data.Suitable.Suitable α) =>
String -> ExprTyp α -> (ExprTyp α)
Co jest ty tak czy inaczej tylda? Dziękuję bardzo.
Nie mam energii (dziś wieczorem), aby napisać kompletną odpowiedź, ale krótka odpowiedź brzmi, że jest to jeszcze jeden przykład głęboko zakorzenionych założeń na temat poziomu rzeczy, które są iniekcyjne, okazując się fałszywe, gdy typ rodziny są dodawane do miksu. Tilda jest asercją równości typu. –
Ah, teraz rozumiem, żadnych problemów. Dziękuję za notatkę. Jak obejść to jest inna historia, którą wciąż staram się rozgryźć. – gatoatigrado