namespace SJK.Functional; public sealed class Left : IEither { private readonly TLeft _value; public Left(TLeft value){ this._value = value; } public IEither Bind(Func> value) { return new Left(_value); } public (TLeft?, TRight?) Deconstruct()=>(_value,default(TRight)); public bool IsRight() => true; public IEither MapLeft(Func mapping) => new Left(mapping(this._value)); public IEither MapRight(Func mapping) => new Left(this._value); public TResult Match(Func left, Func right) { return left(_value); } public void Match(Action left, Action right) { left(_value); } public TLeft Reduce(Func mapping)=> _value; public override string ToString() { return $"Left<{typeof(TLeft).Name}> with Value {_value}"; } }