Class: Left

Left

new Left()

Extends

Methods

staticLeft.from(value){Either}

Creates a new Left from a value. If the value is already a Either instance, the value is returned unchanged. Otherwise, a new Left is made with the value.
Name Type Description
value * Value to wrap in a Left.
Returns:
Type Description
Either Either when is the value already wrapped or Left wrapped value.
Examples

Left from nothing

Left.from();
// => Left()

Left from arbitrary value

Left.from(error);
// => Left(error)

Left from Right

Left.from(Right.from(value));
// => Right.from(value)

Left from another Left

Left.from(Left.from(error));
// => Left(error)

inherited abstractap(other){Either}

Applies the function contained in the instance of a Right to the value contained in the provided Right, producing a Right containing the result. If the instance is a Left, the result is the Left instance. If the instance is a Right and the provided Either is Left, the result is the provided Left.
Name Type Description
other Either Value to apply to the function wrapped in the Right.
Returns:
Type Description
Either Right wrapped applied function or Left.
Example

Right#ap

const findPerson = curryN(3, Person.find); // Person.find(name, birthdate, address)

Right.from(findPerson) // => Right(findPerson)
  .ap(Right.try(getName())) // => Right(name)
  .ap(Right.try(getBirthdate())) // => Right(birthdate)
  .ap(Right.try(getAddress())) // => Right(address)
  .ifRight(console.log); // => Log Person.find() response

inherited abstractbimap(failureMap, successMap){Either}

Transforms a Either by applying the first function to the contained value for a Left or the second function for a Right. The result of each map is wrapped in the corresponding type.
Name Type Description
failureMap function Map to apply to the Left.
successMap function Map to apply to the Right.
Returns:
Type Description
Either Either wrapped value mapped with the corresponding mapping function.
Example
// Using lodash/fp/get
Either.try(loadFile)
  .bimap(get("message"), parseFile)
  // ... other actions in workflow

inherited abstractchain(method){Either}

Applies the provided function to the value contained for a Right. The function should return the value wrapped in a Either. If the instance is a Left, the function is ignored and then instance is returned unchanged.
Name Type Description
method Chain.<Either> The function to invoke with the value.
Returns:
Type Description
Either Either wrapped value returned by the provided method.
Example

Right#chain

// Using lodash/fp/curry and getOr
const getConfigOption = curry((path, config) => Either.Right.from(getOr(
  Either.Left.from(`Value not found at "${path}"`),
  path,
  config
)));

Either.of(config)
  .chain(getConfigOption("path.to.option"))

inherited equals(other){Boolean}

Determines whether or not the other is equal in value to the current (this). This is not a reference check.
Name Type Description
other * Other value to check.
Returns:
Type Description
Boolean true if the two Eithers are equal; false if not equal.
Examples

Reflexivity

v1.equals(v1) === true;
// => true

Symmetry

v1.equals(v2) === v2.equals(v1);
// => true

Transitivity

(v1.equals(v2) === v2.equals(v3)) && v1.equals(v3)
// => true
Extends the Either. This is used for workflow continuation where the context has shifted.
Type Description
Extend.<Either> method - The function to invoke with the value.
Returns:
Type Description
Either
Example

Workflow continuation

// Workflow from makeRequest.js
const makeRequest = requestOptions => requestAsPromise(requestOptions)
  .then(Right.from)
  .catch(Left.from);

// Workflow from savePerson.js
const savePerson = curry((requestOptions, eitherPerson) => eitherPerson
  .map(Person.from)
  .map(person => set("body", person, requestOptions))
  .map(makeRequest)
);

// Workflow from processResponse.js
const processResponse = eitherResponse => eitherResponse
  .ifLeft(console.error)
  .ifRight(console.log);

Either.of(person)
  .extend(savePerson({ method: "POST" }))
  .extend(processResponse);
Returns the value if the instance is a Right otherwise the null.
Returns:
Type Description
*
Examples

Right#get

Right.from(value).get();
// => value

Left#get

Left.from(error).get();
// => null

inherited abstractifLeft(method){Either}

Applies the provided function to the value contain for a Left. Any return value from the function is ignored. If the instance is a Right, the function is ignored and the instance is returned.
Name Type Description
method Consumer The function to invoke with the value.
Returns:
Type Description
Either Current instance.
Examples

Right#ifLeft

Right.from(value).ifLeft(doSomething); // void
// => Right(value)

Left#ifLeft

Left.from(error).ifLeft(doSomething); // doSomething(error)
// => Left(error)

inherited abstractifRight(method){Either}

Applies the provided function to the value contain for a Right. Any return value from the function is ignored. If the instance is a Left, the function is ignored and the instance is returned.
Name Type Description
method Consumer The function to invoke with the value.
Returns:
Type Description
Either Current instance.
Examples

Right#ifRight

Right.from(value).ifRight(doSomething); // doSomething(value)
// => Right(value)

Left#ifRight

Left.from(error).ifRight(doSomething); // void
// => Left(error)

inherited isLeft(){Boolean}

Determines whether or not the instance is a Left.
Returns:
Type Description
Boolean true if the instance is a Left; false is not.
Examples

Right#isLeft

Right.from(value).isLeft();
// => false

Left#isLeft

Left.from(error).isLeft();
// => true

inherited isRight(){Boolean}

Determines whether or not the instance is a Right.
Returns:
Type Description
Boolean true if the instance is a Right; false is not.
Examples

Right

Right.from(value).isLeft();
// => true

Left#isRight

Left.from(error).isLeft();
// => false

inherited abstractmap(method){Either}

Applies the provided function to the value contained for a Right which is, in turn, wrapped in a Right. If the instance is a Left, the function is ignored and then instance is returned unchanged.
Name Type Description
method function The function to invoke with the value.
Returns:
Type Description
Either Either wrapped value mapped with the provided method.
Example
// Using lodash/fp/flow and sort
Right.from([1, 3, 2]).map(flow(sort, join(", ")));
// => Right("1, 2, 3")

Left.from(error).map(flow(sort, join(", ")));
// => Left(error)
See:

inherited abstractorElse(method){*}

Returns the value if the instance is a Right otherwise returns the value supplied if the instance is a Left.
Name Type Description
method Consumer The function to invoke with the value.
Returns:
Type Description
*
Examples

Right#orElse

Right.from(value).orElse(otherValue);
// => value

Left#orElse

Left.from(error).orElse(otherValue);
// => otherValue

inherited abstractorElseGet(method){*}

Return the value if the instance is a Right otherwise returns the value from the function provided.
Name Type Description
method Supplier The function supplying the optional value.
Returns:
Type Description
*
Examples

Right#orElseGet

Right.from(value).orElseGet(getOtherValue);
// => value

Left#orElseGet

Left.from(error).orElse(getOtherValue);
// => otherValue

inherited abstractorElseThrow(method){*}

Returns the value if the instance is a Right otheriwse throws the Error supplied by the function provided. The function receives the value of the Left as its argument.
Name Type Description
method function The function to invoke with the value.
Throws:
returned by the provided function.
Type
Error
Returns:
Type Description
*
Examples

Right#orElseThrow

Right.from(value).orElseThrow(createException);
// => value

Left#orElseThrow

Left.from(error).orElseThrow(createException); // throw createException(error)

inherited abstracttoMaybe(maybe){Maybe}

Converts the Either to a Maybe. Right becomes Just and Left becomes Nothing.
Name Type Description
maybe Maybe Maybe implementation.
Returns:
Type Description
Maybe Maybe wrapped value.
Examples

Right#toMaybe

Right.from(value).toMaybe(Maybe);
// => Maybe.Just(value);

Left#toMaybe

Left.from(error).toMaybe(Maybe);
// => Maybe.Nothing();

inherited abstracttoPromise(promise){Promise}

Converts the Either to a Promise using the provided Promise implementation.
Name Type Description
promise Promise Promise implementation.
Returns:
Type Description
Promise Promise wrapped value.
Examples

Right#toPromise

const Bluebird = require("bluebird");

Right.from(value).toPromise(Bluebird);
// => Promise.resolve(value);

Left#toPromise

const Bluebird = require("bluebird");

Left.from(error).toPromise(Bluebird);
// => Promise.reject(error);

inherited abstracttoString(){String}

Returns a String representation of the Either.
Returns:
Type Description
String String representation.
Examples

Right#toString

Right.from(1).toString();
// => "Either.Right(1)"

Left#toString

Left.from(error).toString();
// => "Either.Left(error)"

inherited abstracttoValidation(validation){Validation}

Converts the Either to a Validation. Right becomes Success and Left becomes Failure.
Name Type Description
validation Validation Validation implementation.
Returns:
Type Description
Validation Validation wrapped value.
Examples

Right#toValidation

Right.from(value).toValidation(Validation);
// => Validation.Success(value);

Left#toValidation

Left.from(error).toValidation(Validation);
// => Validation.Failure();