FoldBack

Cria um novo valor do tipo TState aplicando a função folder ao valor either de acordo com seu estado.

Parâmetros

Retorno

Func<TRight, TState, TState> folderWhenRight

Func<TLeft, TState, TState> folderWhenLeft

Either<TLeft, TRight> either

TState state

TState

Como usar

Esta função realiza uma transformação de um Either<TLeft, TRight> para um TState ao aplicar a função folder, semelhante ao Fold. A única diferença entre este método e o método Fold é sua ordem de parâmetros e a ordem de parâmetros de suas funções folderWhen.

Quando o valor Either está no estado IsRight

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

//result = 42

Quando o valor Either está no estado IsLeft

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

//result = 30

Abordagens para apenas um dos lados

Você pode utilizar os métodos FoldBackLeft e FoldBackRight para obter o mesmo resultado, mas desta vez aplicando a função em somente um dos valores.

Sempre que estas funções forem aplicados para valores Either que não estão do mesmo tipo que a função de avaliação será retornado o valor state informado por parâmetro.

FoldBackRight Quando o valor Either está no estado IsRight

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

//result = 42

FoldBackRight Quando o valor Either está no estado IsLeft

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

FoldBackLeft Quando o valor Either está no estado IsRight

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

Last updated