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

Map

Creates a new Either<TLeft, TRight> value by applying the given mapping functions to either parameter, according to its state.

Parameters

Returns

Func<TRight, TRightResult> mappingWhenRight

Func<TLeft, TLeftResult> mappingWhenLeft

Either<TLeft, TRight> either

Either<TLeftResult, TRightResult>

Usage

This function is usually used to modify an Either value by applying some regular function, just like OptionModule Map.

This function uses the Match method to get the encapsulated value by Either<TLeft, TRight>, then applies the mappingWhenRight or mappingWhenLeft functions, and encapsulate the result.

When Either IsRight

Either<string, int> either = 10;
Either<int, bool> eitherResult = 
    either.Map(
        right => right % 2 == 0,
        left => Convert.ToInt32(left));

//eitherResult.IsRight = true
//eitherResult.Right = true

When Either IsLeft

Either<string, int> either = "25";
Either<int, bool> eitherResult = 
    either.Map(
        right => right % 2 == 0,
        left => Convert.ToInt32(left));

//eitherResult.IsLeft = true
//eitherResult.Left = 25

One sided approach

You can also use the MapLeft and MapRight to produce the same results, but with these methods the mapping 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 the either itself.

MapRight when Either IsRight

Either<string, int> either = 10;
Either<string, int> eitherResult = 
    either.MapRight(right => right * 2);

//eitherResult.IsRight = true
//eitherResult.Right = 20

MapRight when Either IsLeft

Either<string, int> either = "Hello World";
Either<string, int> eitherResult = either.MapRight(
right => right * 2);

//eitherResult.IsLeft = true
//eitherResult.Left = "Hello World"
PreviousFoldBackNextSwap

Last updated 5 years ago

Was this helpful?