FoldBack

Creates a new TState value by applying the given folder functions to state and Either<TLeft, TRight> value according to its state.

Parameters

Returns

Func<TRight, TState, TState> folderWhenRight

Func<TLeft, TState, TState> folderWhenLeft

Either<TLeft, TRight> either

TState state

TState

Usage

This function applies the folder function to the Either<TLeft, TRight> value and to the state according its state.

This function is similar to Fold, the only difference between these two functions are the parameters order and the parameters order of the folder functions.

When Either IsRight

int state = 20
Either<string, int> eitherValue = 22;
int result = 
    eitherValue.FoldBack(
        (right, _state) => right + _state,
        (left, _state) => _state + 10,
        state);

//result = 42

When Either IsLeft

int state = 20
Either<string, int> eitherValue = 22;
int result = 
    eitherValue.FoldBack(
        (right, _state) => right + _state,
        (left, _state) => _state + 10,
        state);

//result = 30

One sided approach

You can also use the FoldLeft and FoldRight to produce the same results, but with these methods the folder is applied just to one of the possible values.

When the target type is different from Either current value the result always will be equals to state.

FoldBackRight when Either IsRight

int state = 20
Either<string, int> eitherValue = 22;
int result = 
    eitherValue.FoldBackRight(
        (right, _state) => right + _state,
        state);

//result = 42

FoldBackRight when Either IsLeft

int state = 20
Either<string, int> eitherValue = "ERROR";
int result = eitherValue.FoldBackRight(
(right, _state) => right + _state,
state);
//result = 20

FoldBackLeft when Either IsRight

int state = 20
Either<string, int> eitherValue = 22;
int result = eitherValue.FoldBackLeft(
(left, _state) => _state + 10,
state);
//result = 20

Last updated