A type family where we have fully inferred all the "base types" --
but all permissions are erased. This is the output of the
A type family where we preserve what the user wrote in all cases. We do not support inference and bases and things may map to bound variables from generic declarations.
A type family where we have fully inferred all the types.
Permissions are partly erased (aliasing information lost). This is
the output of the
The "base data" for a type.
Indicates something that we've opted not to track statically.
The "generic declarations" list out the generic parameters for a given item. Since items inherit generic items from one another (e.g., from their parents),
Declaration of an individual generic type parameter.
A set of generic arguments; e.g., in a type like
A "placeholder" represents a dummy type (or permission, etc) meant to represent
"any type". It is used when you are "inside" a "forall" binder -- so, for example,
when we are type-checking a function like
Signature from a function or method:
A type is the combination of a permission and a base type.
The kinds of base types we have on offer.
A "bound variable" refers to one of the generic type parameters in scope
within a declaration. So, for example, if you have
An enum that lists out the various "kinds" of generic arguments (currently only types) and a distinct type of value for each kind.
Used as the value for inferable things during inference -- either
Encodes whether we reach the data through pointer indirection or not.
The value of a single generic argument; e.g., in a type like