template<typename S, typename M ...> ... op(Series<S>& series, M& monoid, ...)
template<typename S, typename M ...> ... op(Series<S>& series, Monoid<M>& monoid, ...)