Copyright Tony Morris 2008

This software is released under an open source BSD licence.

fj.data
Class Either<A,B>

java.lang.Object
  extended by fj.data.Either<A,B>

public abstract class Either<A,B>
extends Object

The Either type represents a value of one of two possible types (a disjoint union). The data constructors; Left and Right represent the two possible values. The Either type is often used as an alternative to scala.Option where Left represents failure (by convention) and Right is akin to Some.

Version:
2.17

Nested Class Summary
 class Either.LeftProjection<A,B>
          A left projection of an either value.
 class Either.RightProjection<A,B>
          A right projection of an either value.
 
Method Summary
<X> X
either(F<A,X> left, F<B,X> right)
          The catamorphism for either.
static
<A,B> Either<A,B>
iif(boolean c, P1<B> right, P1<A> left)
          If the condition satisfies, return the given A in left, otherwise, return the given B in right.
abstract  boolean isLeft()
          Returns true if this either is a left, false otherwise.
abstract  boolean isRight()
          Returns true if this either is a right, false otherwise.
static
<A,B> Either<A,B>
joinLeft(Either<Either<A,B>,B> e)
          Joins an either through left.
static
<A,B> Either<A,B>
joinRight(Either<A,Either<A,B>> e)
          Joins an either through right.
static
<A,B> F<A,Either<A,B>>
left_()
          A function that constructs a left value of either.
 Either.LeftProjection<A,B> left()
          Projects this either as a left.
static
<A,B> Either<A,B>
left(A a)
          Construct a left value of either.
static
<A,B,X> F<F<A,X>,F<Either<A,B>,Either<X,B>>>
leftMap_()
           
static
<A,B> List<A>
lefts(List<Either<A,B>> es)
          Returns all the left values in the given list.
static
<A> A
reduce(Either<A,A> e)
          Takes an Either to its contained value within left or right.
static
<A,B> F<B,Either<A,B>>
right_()
          A function that constructs a right value of either.
 Either.RightProjection<A,B> right()
          Projects this either as a right.
static
<A,B> Either<A,B>
right(B b)
          Construct a right value of either.
static
<A,B,X> F<F<B,X>,F<Either<A,B>,Either<A,X>>>
rightMap_()
           
static
<A,B> List<B>
rights(List<Either<A,B>> es)
          Returns all the right values in the given list.
static
<A,X> Either<List<A>,X>
sequenceLeft(List<Either<A,X>> a)
          Sequences through the left side of the either monad with a list of values.
static
<B,X> Either<X,List<B>>
sequenceRight(List<Either<X,B>> a)
          Sequences through the right side of the either monad with a list of values.
 Either<B,A> swap()
          If this is a left, then return the left value in right, or vice versa.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

left

public Either.LeftProjection<A,B> left()
Projects this either as a left.

Returns:
A left projection of this either.

right

public Either.RightProjection<A,B> right()
Projects this either as a right.

Returns:
A right projection of this either.

isLeft

public abstract boolean isLeft()
Returns true if this either is a left, false otherwise.

Returns:
true if this either is a left, false otherwise.

isRight

public abstract boolean isRight()
Returns true if this either is a right, false otherwise.

Returns:
true if this either is a right, false otherwise.

either

public <X> X either(F<A,X> left,
                    F<B,X> right)
The catamorphism for either. Folds over this either breaking into left or right.

Parameters:
left - The function to call if this is left.
right - The function to call if this is right.
Returns:
The reduced value.

swap

public Either<B,A> swap()
If this is a left, then return the left value in right, or vice versa.

Returns:
The value of this either swapped to the opposing side.

left

public static <A,B> Either<A,B> left(A a)
Construct a left value of either.

Parameters:
a - The value underlying the either.
Returns:
A left value of either.

left_

public static <A,B> F<A,Either<A,B>> left_()
A function that constructs a left value of either.

Returns:
A function that constructs a left value of either.

right_

public static <A,B> F<B,Either<A,B>> right_()
A function that constructs a right value of either.

Returns:
A function that constructs a right value of either.

right

public static <A,B> Either<A,B> right(B b)
Construct a right value of either.

Parameters:
b - The value underlying the either.
Returns:
A right value of either.

leftMap_

public static <A,B,X> F<F<A,X>,F<Either<A,B>,Either<X,B>>> leftMap_()
Returns:
A function that maps another function across an either's left projection.

rightMap_

public static <A,B,X> F<F<B,X>,F<Either<A,B>,Either<A,X>>> rightMap_()
Returns:
A function that maps another function across an either's right projection.

joinLeft

public static <A,B> Either<A,B> joinLeft(Either<Either<A,B>,B> e)
Joins an either through left.

Parameters:
e - The either of either to join.
Returns:
An either after joining.

joinRight

public static <A,B> Either<A,B> joinRight(Either<A,Either<A,B>> e)
Joins an either through right.

Parameters:
e - The either of either to join.
Returns:
An either after joining.

sequenceLeft

public static <A,X> Either<List<A>,X> sequenceLeft(List<Either<A,X>> a)
Sequences through the left side of the either monad with a list of values.

Parameters:
a - The list of values to sequence with the either monad.
Returns:
A sequenced value.

sequenceRight

public static <B,X> Either<X,List<B>> sequenceRight(List<Either<X,B>> a)
Sequences through the right side of the either monad with a list of values.

Parameters:
a - The list of values to sequence with the either monad.
Returns:
A sequenced value.

reduce

public static <A> A reduce(Either<A,A> e)
Takes an Either to its contained value within left or right.

Parameters:
e - The either to reduce.
Returns:
An Either to its contained value within left or right.

iif

public static <A,B> Either<A,B> iif(boolean c,
                                    P1<B> right,
                                    P1<A> left)
If the condition satisfies, return the given A in left, otherwise, return the given B in right.

Parameters:
c - The condition to test.
right - The right value to use if the condition satisfies.
left - The left value to use if the condition does not satisfy.
Returns:
A constructed either based on the given condition.

lefts

public static <A,B> List<A> lefts(List<Either<A,B>> es)
Returns all the left values in the given list.

Parameters:
es - The list of possible left values.
Returns:
All the left values in the given list.

rights

public static <A,B> List<B> rights(List<Either<A,B>> es)
Returns all the right values in the given list.

Parameters:
es - The list of possible right values.
Returns:
All the right values in the given list.

Copyright Tony Morris 2008

This software is released under an open source BSD licence.