* Am 03.04.07 schrieb Isaac Dupree: > > Sebastian Hanowski wrote: > > > > False && undefined --> False > > True || undefined --> True > > > > but > > > > liftM2 (&&) (Now False) never ~= never > > liftM2 (||) (Now True) never ~= never > > As you show, they keep their short circuiting behavior - as well as > gaining symmetric short-circuiting behavior such that (flip (&&)) = > (&&), for example...? How do they "seem to" lose their short circuiting > behavior?-- I think at least one of us isn't understanding the other one > yet.
I wanted to point out that the pure boolean functions don't care about their second arguments in the given cases whereas the lifted versions do. > > Seems that the delay monad is not an applicative functor. > > Aren't ALL monads applicative functors? (though not the converse), with: > pure = return > (<*>) = ap Of course you're right. The behaviour of the lifted && and || is even better described with applicative functors because it's typical that every effect is performed. Which in this case is non-termination. I had wanted to be speculating about the delay monad not beeing a /traversable functor/. But I still need to consider this further, sorry. Best regards, Sebastian