Я изучаю haskell и пытаюсь максимально использовать аппликативные функторы вместо монад. Он очень аккуратен и прост в составлении. Однако иногда в коде возникают некоторые типы, такие как IO [IO [a]]
или IO Maybe IO Maybe a
, что доставляет мне большие проблемы. По-видимому, в этих сценариях монады становятся неизбежными.
Я знаю, что есть плоская операция, такая как join:: m (m a) -> m a
для одноуровневых монад. Есть ли что-нибудь подобное для многоуровневых монад? Что-нибудь в монадных трансформерах?
Большое спасибо!