Subtyping
Subtyping is a predicate between two types, describe a type can be treat as another type. Its formal syntax usually looked like this: A <: B
(A
is subtype of B
), which means, a binding B
can have value has type A
. Subtyping was wildly used in many class-based languages, but it also brings new problem when working with Ad-hoc. For example: f : B -> B
usually can apply with f (a : A)
when has subtyping, however, if we also have overloading function f : A -> B
? We have three choices here:
- use
A -> B
- use
B -> B
- report conflict error
All of them are fine, it depends on which one you tend to have, this is just trade off.