public Monoid <Pair <A, B> > Pair <B>(Monoid <B> s) => Semigroup.Pair(s.Semigroup).Monoid(id.And(s.Id));
public Reducer <Q, Pair <A, B> > Pair <B>(Reducer <Q, B> s) { var t = this; return(Semigroup.Pair(s.Semigroup).Reducer <Q>(q => t.unit(q).And(s.unit(q)))); }