docs/_spec/TODOreference/experimental/erased-defs-spec.md
TODO: complete
erased is a soft modifier. It can appear:
val definition (but not lazy val or var)class or trait definitionerased val x = ...
erased def f = ...
def g(erased x: Int) = ...
(erased x: Int) => ...
def h(x: (erased Int) => Int) = ...
class K(erased x: Int) { ... }
erased class E {}
A reference to an erased val or def can only be used
erased parametererased val or defFunctions
(erased x1: T1, x2: T2, ..., xN: TN) => y : (erased T1, T2, ..., TN) => R(given erased x1: T1, x2: T2, ..., xN: TN) => y: (given erased T1, T2, ..., TN) => R(given erased T1) => R <:< erased T1 => R(given erased T1, T2) => R <:< (erased T1, T2) => RNote that there is no subtype relation between (erased T) => R and T => R (or (given erased T) => R and (given T) => R)
Eta expansion
if def f(erased x: T): U then f: (erased T) => U.
Erasure semantics
erased parameters are removed from the functionerased parameters are not passed to the functionerased definitions are removed(erased T1, T2, ..., TN) => R and (given erased T1, T2, ..., TN) => R become () => ROverloading
Method with erased parameters will follow the normal overloading constraints after erasure.
Overriding
erased or not be eraseddef foo(x: T): U cannot be overridden by def foo(erased x: T): U and vice-versa