TypeTest[S, T] contains the logic needed to know at runtime if a value of
can be downcasted to T
If a pattern match is performed on a term of type
s: S that is uncheckable with
the pattern are of the form:
t @ X()where the
X.unapplyhas takes an argument of type
Tthen a given instance of
TypeTest[S, T]is summoned and used to perform the test.
A TypeTest[S, T] can serve as an extractor that matches only S of type T.
The compiler tries to turn unchecked type tests in pattern matches into checked ones
by wrapping a
(_: T) type pattern as
tt(_: T), where
tt is the
TypeTest[S, T] instance.
Type tests necessary before calling other extractors are treated similarly.
SomeExtractor(...) is turned into
is uncheckable, but we have an instance of