public static void Main() {
var original = new IO<int>(3);
var result = ChevronEqualIntDirect(original, x => x + 1);
ChevronEqual(result, x => {
static IO<B> ChevronEqual<A, B>(IO<A> arg1, Func<A, IO<B>> arg2)
=> arg1.DoChevronEqual(arg2);
static IO<int> ChevronEqualIntDirect(IO<int> arg1, Func<int, int> fn)
=> ChevronEqual(arg1, a => new IO<int>(fn(a)));
private readonly T Value;
public IO(T value) => Value = value;
public IO<B> DoChevronEqual<B>(Func<T, IO<B>> fn) => fn(this.Value);