why do we need all these extra makeFinalizerFn functions? It seems to be a lot of redundant code from makeMetricManipulatorFn