@override Option<B> foldMapO<B>(Semigroup<B> si, B f(A a)) => uncons(none, (head, tail) => some(tail.foldLeft(f(head), (acc, a) => si.append(acc, f(a)))));