public B SumMapRight <B>(Func <A, B> f, Monoid <B> m) => FoldRight((a, b) => m.Op(f(a), b), m.Id);
public B SumMapLeft <B>(Func <A, B> f, Monoid <B> m) { return(FoldLeft <B>((a, b) => m.Op(a, f(b)), m.Id)); }
public B SumMapRight <B>(Func <A, B> f, Monoid <B> m) { return(FoldRight <B>((a, b) => m.Op(f(a), b), m.Id)); }