namespace SJK.Functional; public interface IEither { IEither MapLeft(Func mapping); IEither MapRight(Func mapping); TLeft Reduce(Func mapping); (TLeft?, TRight?) Deconstruct(); TResult Match(Func left, Func right); void Match(Action left, Action right); IEither Bind(Func> value); bool IsRight(); bool IsLeft() => !IsRight(); }