I mean, monads famously don't compose - you have to write a bunch of monad transformers.
I can very easily have a fallible, asynchronous, multi-value, stateful, database connected computation that returns a Bool and use it in let’s say ‘filterM’.
Most transformers are already written for me.
Edit: switching between no effect and some effect is the tricky part though.