Only `Semigroup[C]` should be needed here; an abstract `def C: Monoid[C]` in `ConstApplicative` will interact with the `def C: Semigroup[C]` in a sensible way.