А почему он должен быть просто Functor, а не просто полиморфный контейнер? Почему Monad — Applicative и Functor?
Из traverse :: Applicative f => (a -> f b) -> t a -> f (t b) можно вывести fmap как \f -> runIdentity . traverse (Indentity . f) и все fold'ы через State.
@ndtimofeev > А почему он должен быть просто Functor, а не просто полиморфный контейнер?
справедливо.жпг
> Почему Monad — Applicative и Functor?
чтобы не делать всё через bind
про fold я не понял, ну лан