## Either `Either` is a monad and can be used as a generic structure for a type with two possibilities: a **Left a** or a **Right b**. It represents the logical disjunction between `a` and `b`. A common use of this structure is to handle error cases and situations where a computation might fail, while also providing additional information about the failure. It is used to represent a value that is either correct or an error. By convention, the **Left** constructor is used to hold an error value, and the **Right** constructor is used to hold a correct value. This structure forces explicit handling of failures and avoids the problems associated with throwing exceptions. **Implements:** [BiFunctor](https://github.com/fantasyland/fantasy-land#bifunctor), [Monad](https://github.com/fantasyland/fantasy-land#monad), [Setoid](https://github.com/fantasyland/fantasy-land#setoid) - [Either](#either) - [Either.of(v)](#eitherofv) - [Either.Right(v)](#eitherrightv) - [Either.Left(v)](#eitherleftv) - [Either.fromNullable(v)](#eitherfromnullablev) - [Either.withDefault(def, v)](#eitherwithdefaultdef-v) - [Either.swap()](#eitherswap) - [Either.try(f)](#eithertryf) - [Either.bimap(e, fl, fr)](#eitherbimape-fl-fr) - [Either.isLeft(e)](#eitherislefte) - [Either.isRight(e)](#eitherisrighte) - [Either.equals(n)](#eitherequalsn) - [Either.map(f)](#eithermapf) - [Either.bimap(fl, fr)](#eitherbimapfl-fr) - [Either.chain(f)](#eitherchainf) - [Either.swap()](#eitherswap-1) - [Either.isLeft()](#eitherisleft) - [Either.isRight()](#eitherisright) - [Either.ap(j)](#eitherapj) - [Either.getValue()](#eithergetvalue) ### Either.of(v) Creates a **Right** `Either`. | Param | Type | Description | | ----- | ---------------- | ----------- | | v | any | Value | ### Either.Right(v) Creates a **Right** `Either`. | Param | Type | Description | | ----- | ---------------- | ----------- | | v | any | Value | ### Either.Left(v) Creates a **Left** `Either`. | Param | Type | Description | | ----- | ---------------- | ----------- | | v | any | Value | ### Either.fromNullable(v) Creates a **Right** if the value is not `null` or `undefined`; otherwise, creates a **Left**. | Param | Type | Description | | ----- | ---------------- | ----------- | | v | any | Value | ### Either.withDefault(def, v) Creates a **Right** if the value `v` is not `null` or `undefined`; otherwise, creates a **Right** with the default value `def`. | Param | Type | Description | | ----- | ---------------- | ------------- | | def | any | Default value | | v | any | Value | ### Either.swap() Swaps the **Left** and **Right** elements of the current `Either`. ### Either.try(f) Executes the passed function that may throw and converts it to an `Either` type. | Param | Type | Description | | ----- | --------------------- | ---------------------------------- | | f | function | A function that may throw an error | ### Either.bimap(e, fl, fr) A static method that applies `fl` to the **Left** element or `fr` to the **Right** element of the current `Either`. | Param | Type | Description | | ----- | --------------------- | ----------------------------------------------- | | e | any | `Either` type | | fl | function | Function to be applied on the **Left** element | | fr | function | Function to be applied on the **Right** element | ### Either.isLeft(e) A static method that returns `true` if the passed `Either` is a **Left**. | Param | Type | Description | | ----- | ---------------- | ------------- | | e | any | `Either` type | ### Either.isRight(e) A static method that returns `true` if the passed `Either` is a **Right**. | Param | Type | Description | | ----- | ---------------- | ------------- | | e | any | `Either` type | ### Either.equals(n) Returns `true` if the current and the passed element are of `Either` type with the same value. | Param | Type | Description | | ----- | ---------------- | -------------------------- | | n | any | Any value of type `Setoid` | ### Either.map(f) Applies the passed function to the value of the current `Either` if it is a **Right**. | Param | Type | Description | | ----- | --------------------- | ----------- | | f | function | Function | ### Either.bimap(fl, fr) Applies `fl` to the **Left** element or `fr` to the **Right** element of the current `Either`. | Param | Type | Description | | ----- | --------------------- | ----------------------------------------------- | | fl | function | Function to be applied on the **Left** element | | fr | function | Function to be applied on the **Right** element | ### Either.chain(f) An instance method that can chain together many computations that return an `Either` type. | Param | Type | Description | | ----- | --------------------- | -------------------------------------- | | f | function | Function that returns another `Either` | ### Either.swap() Swaps the **Left** and **Right** elements of the current `Either`. ### Either.isLeft() An instance method that returns `true` if the current `Either` is a **Left**. ### Either.isRight() An instance method that returns `true` if the current `Either` is a **Right**. ### Either.ap(j) Applies the function inside the passed `Either` to the current `Either` if it is a **Right**. | Param | Type | Description | | ----- | ---------------- | ------------------------ | | j | any | `Either` with a function | ### Either.getValue() Gets the value inside the `Either`.