trait
GOOD[G] extends AnyRef
Type Members
-
type
BAD[B] = Or[G, B]
Value Members
-
final
def
!=(arg0: AnyRef): Boolean
-
final
def
!=(arg0: Any): Boolean
-
final
def
##(): Int
-
final
def
==(arg0: AnyRef): Boolean
-
final
def
==(arg0: Any): Boolean
-
final
def
asInstanceOf[T0]: T0
-
def
clone(): AnyRef
-
final
def
eq(arg0: AnyRef): Boolean
-
def
equals(arg0: Any): Boolean
-
def
finalize(): Unit
-
final
def
getClass(): Class[_]
-
def
hashCode(): Int
-
final
def
isInstanceOf[T0]: Boolean
-
final
def
ne(arg0: AnyRef): Boolean
-
final
def
notify(): Unit
-
final
def
notifyAll(): Unit
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
-
def
toString(): String
-
final
def
wait(): Unit
-
final
def
wait(arg0: Long, arg1: Int): Unit
-
final
def
wait(arg0: Long): Unit
Inherited from AnyRef
Inherited from Any
Trait providing a concise type lambda syntax for
Or
types partially applied on their "good" type.This trait is used to curry the type parameters of
Or
, which takes two type parameters, into a type (this trait) which takes one parameter, and another (its type member) which takes the other. For example, typeOr[G, B]
(which can be written in infix form asG Or B
) can be expressed in curried form asOr.GOOD[G]#BAD[B]
. Leaving off the finalBAD
type parameter yields a "type lambda," such asOr.GOOD[Int]#BAD
.For example, consider this method that takes two type parameters, a type constructor named
Context
and a type namedA
:Because
List
takes a single type parameter, it fits the shape ofContext
, it can be simply passed toexample
--i.e., the compiler will inferContext
asList
:But because
Or
takes two type parameters,G
for the "good" type andB
for the "bad" type, it cannot simply be passed, because the compiler doesn't know which ofG
or B you'd want to abstract over:You must therefore tell the compiler which one you want with a "type lambda." Here's an example:
The alternate type lambda syntax provided by this trait is more concise and hopefully easier to remember and read:
You can read
Or.GOOD[Int]#BAD
as: anOr
with its "good" type fixed toInt
and its "bad" type left unspecified.