Рассмотрим следующую сигнатуру foldMap
foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
Это очень похоже на "bind", только с заменой аргументов:
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Мне кажется, что между Foldable
, Monoid
и Monad
должно быть какое-то отношение, но я не могу найти его в суперклассах. Предположительно, я могу преобразовать одну или две из них в другую, но я не уверен, как это сделать.
Можно ли детализировать это отношение?