When to use Applicative vs Monad
A nice rule of as to when you must use Monad and when you can use Applicative style:
How do you use Control.Applicative to write cleaner Haskell?
Update: May be another way to look at this is to think of >>= as combinator that applies the mapping function then flattens the result of application of (a -> mb), and (in some implementations) change the computation based on the value of the "a". In computations where the >>= is only flattening the types, it can be converted to an Applicative computation.
How do you use Control.Applicative to write cleaner Haskell?
Update: May be another way to look at this is to think of >>= as combinator that applies the mapping function then flattens the result of application of (a -> mb), and (in some implementations) change the computation based on the value of the "a". In computations where the >>= is only flattening the types, it can be converted to an Applicative computation.