Author: ghik Created: 07/01/16.
A typeclass which witnesses that type A
can be wrapped into trait or abstract class B
Like Opt but does have a counterpart for Some(null)
.
Base trait for companion objects of sealed traits that serve as named enums
Like Option
but avoids boxing and treats null
as no value.
OptArg is like Opt except it's intended to be used to type-safely express optional method/constructor
parameters while at the same time avoiding having to explicitly wrap arguments when passing them
(thanks to the implicit conversion from A
to OptArg[A]
).
OptArg is like Opt except it's intended to be used to type-safely express optional method/constructor
parameters while at the same time avoiding having to explicitly wrap arguments when passing them
(thanks to the implicit conversion from A
to OptArg[A]
). For example:
def takesMaybeString(str: OptArg[String] = OptArg.Empty) = ??? takesMaybeString() // default empty value is used takesMaybeString("string") // no explicit wrapping into OptArg required
Note that like Opt, OptArg assumes its underlying value to be non-null and null
is translated into OptArg.Empty
.
It is strongly recommended that OptArg type is used ONLY in signatures where implicit conversion A => OptArg[A]
is intended to work. You should not use OptArg as a general-purpose "optional value" type - other types like
Opt, NOpt and scala.Option serve that purpose. For this reason OptArg deliberately does not have any "transforming"
methods like map
, flatMap
, orElse
, etc. Instead it's recommended that OptArg is converted to Opt,
NOpt or scala.Option as soon as possible (using toOpt
, toNOpt
and toOption
methods).
Like Opt but has better Java interop thanks to the fact that wrapped value has type A
instead of Any
.
Like Opt but has better Java interop thanks to the fact that wrapped value has type A
instead of Any
.
For example, Scala method defined like this:
def takeMaybeString(str: OptRef[String]): Unit
will be seen by Java as:
public void takeMaybeString(String str);
and null
will be used to represent absence of value.
This comes at the cost of A
having to be a nullable type. Also, empty value is represented internally using null
which unfortunately makes OptRef suffer from SI-7396 (hashCode
fails on OptRef.Empty
which means that you
can't add OptRef values into hash sets or use them as hash map keys).
Author: ghik Created: 07/01/16.
Trait to be extended by enums whose values are ordered by declaration order.
Trait to be extended by enums whose values are ordered by declaration order. Ordering is derived from SourceInfo object, which is typically accepted as an implicit, e.g.
sealed abstract class MyOrderedEnum(implicit val sourceInfo: SourceInfo) extends OrderedEnum object MyOrderedEnum { case object First extends MyOrderedEnum case object Second extends MyOrderedEnum case object Third extends MyOrderedEnum val values: List[MyOrderedEnum] = caseObjects }
In the example above, values
is guaranteed to return First
, Second
and Third
objects in exactly that order.
Author: ghik Created: 23/11/15.
Base trait for companion objects of sealed traits that serve as enums, i.e.
Base trait for companion objects of sealed traits that serve as enums, i.e. their only values are case objects. For example:
sealed trait SomeEnum object SomeEnum extends SealedEnumCompanion[SomeEnum] { case object FirstValue extends SomeEnum case object SecondValue extends SomeEnum case object ThirdValue extends SomeEnum // it's important to give explicit type here val values: List[SomeEnum] = caseObjects }
Macro-materialized implicit value that provides information about callsite source file position.
Macro-materialized implicit value that provides information about callsite source file position.
It can be used in runtime for logging and debugging purposes.
Similar to Scalactic's Position
, but contains more information.
Base class for sealed enums which can be used as key type for a TypedMap.
Author: ghik Created: 21/04/16.
Creates reversed partial function.
Author: ghik Created: 19/09/16.
Author: ghik Created: 24/11/15.
Author: ghik Created: 11/12/15.
Like
Option
but avoids boxing and treatsnull
as no value. Therefore, there is no equivalent forSome(null)
.Author: ghik Created: 07/01/16.