------------------

foldBy :: Foldable t => (a -> a -> a) -> a -> t a -> a
foldBy f z = reifyFold f z (foldMap M)

foldByOf :: (forall i. Getting (M a i) s a) -> (a -> a -> a) -> a -> s -> a
foldByOf l f z = reifyFold f z (foldMapOf l M)

foldMapBy :: Foldable t => (r -> r -> r) -
foldBy :: Foldable t => (a -> a -> a) -> a -> t a -> a
foldBy f z = reifyFold f z (foldMap M)
foldBy f z = reifyFold f z (foldMap M)