What does it mean to talk about a monotonic function with Applicative side-effects
(a -> f b) in this setting?
I'm not able to determine how laws for such a beast work.
You can reason about just the pure case easily. That is a strict generalization, but the whole point of using it is to string together effects, no?
For some instances it is positional. e.g. using a ZipList means that for each position in the ZipList generated the function must be monotone.
For others it is a global statement. e.g. the list monad to properly be monotone you'd need to consider the maximal element in each result list against the minimal element of the next result list
Yes, you can reason it through casewise, by knowing which of the b's in the f's get merged by the particular Applicative, but the fact that you have to reason it through casewise without being able to express uniform laws about the operation indicates to me that it may be a less well defined notion than you might at first think.
-Edward