public void EitherFoldWhenLeft() { int state = 10; int expected = 10; Either <string, int> either = "10"; int result = EitherModule.Fold( (_state, right) => right + _state, (_state, left) => _state, state, either); Assert.AreEqual(expected, result); }
/// <summary> /// Creates a new <typeparamref name="TState"/> value by applying the given folder functions /// to <paramref name="state"/> and <see cref="Either{TLeft, TRight}"/> value. /// </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="folderWhenLeft">The function to transform either value from the input <paramref name="either"/> to a new state value.</param> /// <param name="folderWhenRight">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 folder functions /// to <paramref name="state"/> and <see cref="Either{TLeft, TRight}"/> value. /// </returns> public static TState Fold <TLeft, TRight, TState>(this Either <TLeft, TRight> either, TState state, Func <TState, TRight, TState> folderWhenRight, Func <TState, TLeft, TState> folderWhenLeft) => EitherModule.Fold(folderWhenRight, folderWhenLeft, state, either);