f effs2 => (forall f. Sig f effs1 => f b) -> f b)
-> Eff effs1 a
-> Eff effs2 a
embed weaken (Eff k) = Eff $ \f -> k $ \b -> f (weaken b)
это нет:
embedQC
:: (forall f. Sig f effs2 => Sig f effs1)
=> Eff effs1 a
-> Eff effs2 a
embedQC (Eff k) = Eff $ \f -> k $ \b -> f b
Говорит
• Could not deduce: Sig f effs1 arising from a use of ‘b’
from the context: forall (f :: * -> *). Sig f effs2 => Sig f effs1
ЧЯДНТ?
короче оказалось, что дело в том, что Sig определена как type family. Если определить как эквивалентный class, то все работает. Кто-нибудь пейпер читал? Оно так и задумано?
Обсуждают сегодня