My message was written too hastily, sorry about that.
The example Alexey asked is exactly what the ApplicativeDo proposal[1] uses as motivation. The point of it is that you shouldn't need to care about writing applicative or do-style, when the behavior differs the most efficient one can be used.
Though as it stands the proposal seems to run into the problem of being unintuitive like others mentioned since you need to enable an extension. A type implementing this functionality would need to be documented as "Enable ApplicativeDo when using this, or be very confused"
- Adam