public B SumMapLeft <B>(Func <A, B> f, Semigroup <B> m) => tail.FoldLeft <B>((a, b) => m.Op(a, f(b)), f(head));
public B SumMapRight <B>(Func <A, B> f, Semigroup <B> m) => tail.FoldRight <B>((a, b) => m.Op(f(a), b), f(head));