Returning a MetricsSet from functions would require knowing the implementation of MetricsSet inside each of those functions. Merging it after every call without a programmable semicolon would be cumbersome. I guess I could override some operator like += or |= to make it more conscise... and I guess that would look fairly readable...
but that's what a MonadWriter would do under the hood, except without all the boilerplate, and in a way where the caller determines the impl