pass monoid down for value update