Fold
Cria um novo valor do tipo TState
aplicando a função folder
ao valor either
de acordo com seu estado.
Parâmetros | Retorno |
---|---|
Func<TState, TRight, TState> folderWhenRight Func<TState, TLeft, TState> folderWhenLeft TState state Either<TLeft, TRight> either |
TState |
Como usar
Esta função realiza uma transformação de um Either<TLeft, TRight>
para um TState
ao aplicar a função folder
respectiva ao seu estado.
Quando o valor Either está no estado IsRight
int state = 20
Either<string, int> eitherValue = 22;
int result = eitherValue.Fold(
state,
(_state, right) => right + _state,
(_state, left) => _state + 10);
//result = 42
Quando o valor Either está no estado IsLeft
int state = 20
Either<string, int> eitherValue = "ERROR";
int result = eitherValue.Fold(
state,
(_state, right) => right + _state,
(_state, left) => _state + 10);
//result = 30
Abordagens para apenas um dos lados
Você pode utilizar os métodos FoldLeft
e FoldRight
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.
FoldRight Quando o valor Either está no estado IsRight
int state = 20
Either<string, int> eitherValue = 22;
int result = eitherValue.FoldRight(
state,
(_state, right) => right + _state);
//result = 42
FoldRight Quando o valor Either está no estado IsLeft
int state = 20
Either<string, int> eitherValue = "ERROR";
int result = eitherValue.FoldRight(
state,
(_state, right) => right + _state);
//result = 20
FoldLeft Quando o valor Either está no estado IsRight
int state = 20
Either<string, int> eitherValue = 22;
int result = eitherValue.FoldLeft(
state,
(_state, left) => _state + 10);
//result = 20