This is what I understood after watching the article.
A typeA Fix
satisfies 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 M
does not play any role here. If you use isorecursive types, you M
will 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 x
it is not a type variable, but a term variable. The term "moves" within a type. This is not a recursive type.
source
share