<div dir="ltr">The interesting bit is, the following function<br>> \φ ma mb -> join (pure φ <*> ma <*> mb)<br>which i like to write as follows using ((&) = flip ($)) [infixl 1]<br>> \φ ma mb -> pure φ <*> ma <*> mb & join<br>(but it's just personal taste) is very similar to (=<<), aka (flip (>>=)) except the first argument (here φ) has type (a -> b -> m c) instead of (a -> m b), and of course the lambda above takes an added argument too (mb). Some could call it "bind2" (even if it's the flipped version of (>>=) that is being generalized), and well, some do. For those interested, there are several options are available to import it (along possibly with some of its siblings), from several libraries. (List possibly non exhaustive.)<br><a href="http://hackage.haskell.org/package/prelude-generalize-0.4/docs/Prelude-Generalize.html#v:bind2" target="_blank">http://hackage.haskell.org/package/prelude-generalize-0.4/docs/Prelude-Generalize.html#v:bind2</a><br><a href="http://hackage.haskell.org/package/SimpleH-1.2/docs/Algebra-Monad.html#v:bind2" target="_blank">http://hackage.haskell.org/package/SimpleH-1.2/docs/Algebra-Monad.html#v:bind2</a><br><a href="http://hackage.haskell.org/package/definitive-base-2.3/docs/Algebra-Monad-Base.html#v:bind2" target="_blank">http://hackage.haskell.org/package/definitive-base-2.3/docs/Algebra-Monad-Base.html#v:bind2</a><br><br>your problem become btw then:<br>> doIt = bind2 update a b<br></div>