public void EitherFoldBackLeftWhenLeft() { string state = "Hello"; string expected = "Hello World"; Either <string, int> either = " World"; string result = EitherModule.FoldBackLeft( (left, _state) => string.Concat(_state, left), either, state); Assert.AreEqual(expected, result); }
/// <summary> /// Creates a new <typeparamref name="TState"/> value by applying the given <paramref name="folder"/> function /// to <see cref="Either{TLeft, TRight}"/> value and <paramref name="state"/> when <paramref name="either"/> <see cref="Either{TLeft, TRight}.IsLeft"/>. /// Otherwise, returns the <paramref name="state"/>. /// </summary> /// <typeparam name="TLeft">The type of the left value.</typeparam> /// <typeparam name="TRight">The type of the right value.</typeparam> /// <typeparam name="TState">The type of initial and final states</typeparam> /// <param name="folder">The function to transform either value from the input <paramref name="either"/> to a new state value.</param> /// <param name="state">The initial state.</param> /// <param name="either">the input either.</param> /// <returns> /// Returns a new <typeparamref name="TState"/> value by applying the given <paramref name="folder"/> function /// to <see cref="Either{TLeft, TRight}"/> value and <paramref name="state"/> when <paramref name="either"/> <see cref="Either{TLeft, TRight}.IsLeft"/>. /// Otherwise, returns the input <paramref name="either"/>. /// </returns> public static TState FoldBackLeft <TLeft, TRight, TState>(this Either <TLeft, TRight> either, Func <TLeft, TState, TState> folder, TState state) => EitherModule.FoldBackLeft(folder, either, state);