This is what I understood after watching the article.
A typeA Fixsatisfies typing equivalence (assuming equirecursive types)
G |- M : Fix x. t <=> G |- M : t{Fix x. t / x}
i.e. you can expand the type above you. Please note that the term Mdoes not play any role here. If you use isorecursive types, you Mwill use some isomorphism (for example, the Haskell constructor newtype), but this is not so important.
Instead, Self types satisfy the following
G |- M : Self x. t <=> G |- M : t{M / x}
Now xit is not a type variable, but a term variable. The term "moves" within a type. This is not a recursive type.
source
share