p
Смысл один : кастуй с тайплевела в value level с помощью тайпклассов. А потом можно проматчить по тегу и через unsafeCoerce безопасно кастануть назад, если нужно.
Size: a a a
p
VY
ЗП
Common тут энкодинг existencial через forallЗП
∃x. P(x) <-> ¬∀x. ¬P(x) ~ ∀x. (P(x) -> ⊥) -> ⊥
⊥ = Void
Void ~ forall r. r
∀x. (P(x) -> ⊥) -> ⊥ ~ forall r. (forall x. P x -> r) -> r
в нашем случаеnewtype Common = Common ( forall r . ( forall a . FsTag a => a -> r ) -> r )
добавился еще констрейнтЗП
Common = exists a. FsTag a => aЗП
p
p
ЗП
p
ЗП
p
AK
p
p
VY
AK
AK
VK
VK