quite often, you don't need the full power of a monad and the corresponding applicative functor is sufficient. these cases could be detected by the macro.
additionally, there are at least some monads where there is a "better" (more performant, less blocking...) way to implement the <*> operation than the default using bind.
would it be possible to exploit this fact to generate code that directly calls <*> instead of bind?