Returns true if this is a Right and its value is equal to elem
(as determined by the equals
protocol), returns false
otherwise.
// True
Right("something").contains("something")
// False because the values are different
Right("something").contains("anything") // false
// False because the source is a `left`
Left("something").contains("something") // false
Implements IEquals.equals.
is the right hand side of the equality check
Returns false
if the source is a left
, or returns the result
of the application of the given predicate to the right
value.
// True, because it is a right and predicate holds
Right(20).exists(n => n > 10)
// False, because the predicate returns false
Right(10).exists(n => n % 2 != 0)
// False, because it is a left
Left(10).exists(n => n == 10)
Filters right
values with the given predicate, returning
the value generated by zero
in case the source is a right
value and the predicate doesn't hold.
Possible outcomes:
right
if this is a right
value and the
given predicate p
holds for itLeft(zero())
if this is a right
value
and the given predicate p
does not holdLeft
Right(12).filterOrElse(x => x > 10, () => -1) // Right(12)
Right(7).filterOrElse(x => x > 10, () => -1) // Left(-1)
Left(7).filterOrElse(x => false, () => -1) // Left(7)
Applies the left
function to Left values, and the
right
function to Right values and returns the result.
const maybeNum: Either<string, number> =
tryParseInt("not a number")
const result: string =
maybeNum.fold(
str => `Could not parse string: ${str}`,
num => `Success: ${num}`
)
Returns true if the source is a left
or returns
the result of the application of the given predicate to the
right
value.
// True, because it is a `left`
Left("hello").forAll(x => x > 10)
// True, because the predicate holds
Right(20).forAll(x => x > 10)
// False, it's a right and the predicate doesn't hold
Right(7).forAll(x => x > 10)
Executes the given side-effecting function if the
source is a right
value.
Right(12).forAll(console.log) // prints 12
Left(10).forAll(console.log) // silent
Returns the Right
value, if the source has one,
otherwise throws an exception.
WARNING!
This function is partial, the Either
must be a Right
, otherwise
a runtime exception will get thrown. Use with care.
Returns the value from this right
or the given fallback
value if this is a left
.
Right(10).getOrElse(27) // 10
Left(10).getOrElse(27) // 27
Returns the value from this right
or a value generated
by the given thunk
if this is a left
.
Right(10).getOrElseL(() => 27) // 10
Left(10).getOrElseL(() => 27) // 27
Implements IEquals.hashCode.
Returns true
if this is a left
, false
otherwise.
Left("hello").isLeft() // true
Right(10).isLeft() // false
Returns true
if this is a right
, false
otherwise.
Left("hello").isRight() // false
Right(10).isRight() // true
Transform the source if it is a right
with the given
mapping function.
Right(10).map(x => x + 17) // right(27)
Left(10).map(x => x + 17) // left(10)
If this is a left
, then return the left value as a right
or vice versa.
Right(10).swap() // left(10)
Left(20).swap() // right(20)
Returns an Option.some(right)
if the source is a right
value,
or Option.none
in case the source is a left
value.
Maps 2 Either
values by the mapping function, returning a new
Either
reference that is a Right
only if both Either
values are
Right
values, otherwise it returns the first Left
value noticed.
// Yields Right(3)
Try.map2(Right(1), Right(2),
(a, b) => a + b
)
// Yields Left, because the second arg is a Left
Try.map2(Right(1), Left("error"),
(a, b) => a + b
)
This operation is the Applicative.map2
.
Maps 3 Either
values by the mapping function, returning a new
Either
reference that is a Right
only if all 3 Either
values are
Right
values, otherwise it returns the first Left
value noticed.
// Yields Right(6)
Try.map3(Right(1), Right(2), Right(3),
(a, b, c) => a + b + c
)
// Yields Left, because the second arg is a Left
Try.map3(Right(1), Left("error"), Right(3),
(a, b, c) => a + b + c
)
Maps 4 Either
values by the mapping function, returning a new
Either
reference that is a Right
only if all 4 Either
values are
Right
values, otherwise it returns the first Left
value noticed.
// Yields Right(10)
Try.map4(Right(1), Right(2), Right(3), Right(4),
(a, b, c, d) => a + b + c + d
)
// Yields Left, because the second arg is a Left
Try.map4(Right(1), Left("error"), Right(3), Right(4),
(a, b, c, d) => a + b + c + d
)
Maps 5 Either
values by the mapping function, returning a new
Either
reference that is a Right
only if all 5 Either
values are
Right
values, otherwise it returns the first Left
value noticed.
// Yields Right(15)
Try.map5(Right(1), Right(2), Right(3), Right(4), Right(5),
(a, b, c, d, e) => a + b + c + d + e
)
// Yields Left, because the second arg is a Left
Try.map5(Right(1), Left("error"), Right(3), Right(4), Right(5),
(a, b, c, d, e) => a + b + c + d + e
)
Maps 6 Either
values by the mapping function, returning a new
Either
reference that is a Right
only if all 6 Either
values are
Right
values, otherwise it returns the first Left
value noticed.
// Yields Right(21)
Try.map5(Right(1), Right(2), Right(3), Right(4), Right(5), Right(6),
(a, b, c, d, e, f) => a + b + c + d + e + f
)
// Yields Left, because the second arg is a Left
Try.map5(Right(1), Left("error"), Right(3), Right(4), Right(5), Right(6),
(a, b, c, d, e, f) => a + b + c + d + e + f
)
Builds a pure Either
value.
This operation is the pure Applicative
operation for lifting
a value in the Either
context.
Keeps calling f
until a Right(b)
is returned.
Based on Phil Freeman's Stack Safety for Free.
Described in FlatMap.tailRecM
.
Generated using TypeDoc
Result of the Left data constructor, representing "left" values in the Either disjunction.