Tango
  • Introduction
  • Getting Started
    • Summary
    • From me, the Developer
    • What is Tango?
    • Where to start?
  • Installation
    • Based on NuGet
    • Manually
  • Fundamentals
    • Introduction
    • Using Pattern Matching
    • Option values
    • Either values
    • From void to Unit
    • Func and Action
    • Chainable operations in a Continuation flow
    • Currying and Partial Application
  • Functional
    • Introduction
    • Currying
    • Partial Application
    • Functional Extensions
    • QuickCast to Delegates
  • Operations
    • Introduction
    • Operations with Booleans
    • Operations with Integers
    • Operations with Decimals
    • Operations with Doubles
    • Operations with Strings
  • Types
    • Introduction
    • Unit
    • Option<T>
    • Either<TLeft, TRight>
    • Continuation<TFail, TSuccess>
  • Modules
    • Introduction
    • Option
      • Apply
      • AsEnumerable
      • Bind
      • Count
      • Exists
      • Filter
      • Fold
      • FoldBack
      • Iterate
      • Map
      • OfNullable
      • ToArray
      • ToList
      • ToNullable
    • Either
      • Exists
      • Iterate
      • Fold
      • FoldBack
      • Map
      • Swap
      • ToTuple
    • Continuation
      • AsContinuation
      • Resolve
      • Reject
      • All
    • Collection
      • Append
      • Choose
      • ChunkBySize
      • Collect
      • CompareWith
      • CountBy
      • Concat
      • Distinct
      • Empty
      • Exists
      • Exists2
      • Filter
      • FindIndex
      • Fold
      • Fold2
      • FoldBack
      • FoldBack2
      • ForAll
      • ForAll2
      • ForAll3
      • Head
      • HeadAndTailEnd
      • Range
      • Generate
      • Initialize
      • Iterate
      • Iterate2
      • IterateIndexed
      • IterateIndexed2
      • Map
      • Map2
      • Map3
      • MapIndexed
      • MapIndexed2
      • MapIndexed3
      • Partition
      • Permute
      • Pick
      • Reduce
      • ReduceBack
      • Replicate
      • Scan
      • Scan2
      • ScanBack
      • ScanBack2
      • Tail
      • TryFind
      • TryPick
      • Unzip
      • Unzip3
      • Zip
      • Zip3
  • Extensions
    • Introduction
    • Enum Extensions
    • EqualityComparer Builder
    • Modules as Extensions
Powered by GitBook
On this page

Was this helpful?

  1. Modules
  2. Either

Fold

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<TState, TRight, TState> folderWhenRight

Func<TState, TLeft, TState> folderWhenLeft

TState state

Either<TLeft, TRight> either

TState

Usage

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

When Either IsRight

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

//result = 42

When Either IsLeft

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

//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.

FoldRight when Either IsRight

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

//result = 42

FoldRight when Either IsLeft

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

//result = 20

FoldLeft Either IsRight

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

//result = 20
PreviousIterateNextFoldBack

Last updated 5 years ago

Was this helpful?