public ChainOperator(ChainOperator outerChain, T value) { this.data = outerChain.data; this.index = outerChain.index + 1; this.data.Add(value); }
public static T Return <T>(this ChainOperator <T> chain) => chain.data[chain.index].As <T>();
public static ChainOperator <T> And <T>(this ChainOperator <T> chain, Action <T> actor) => chain.Pipe(actor);
public static ChainOperator <N> Mutate <T, N>(this ChainOperator <T> chain, Func <T, N> actor) => new ChainOperator <N>(chain, actor(chain.Return()));
public static R Return <T, R>(this ChainOperator <T> chain, Func <T, R> actor) => actor(chain.data[chain.index].As <T>());