public Monoid <B> XSelect <B>(Func <A, B> f, Func <B, A> g) { return(Semigroup.XSelect(f, g).Monoid(f(id))); }
public Reducer <Q, B> XSelect <B>(Func <A, B> f, Func <B, A> g) { var t = this; return(Semigroup.XSelect(f, g).Reducer <Q>(q => f(t.unit(q)))); }