Thank you for the references. I like the term 'bind2'. I had a look at Prelude.Generalized. Wow!
bind2 = join .:: liftM2; (.::) = (.) . (.) . (.)
The interesting bit is, the following function > \φ ma mb -> join (pure φ <*> ma <*> mb) which i like to write as follows using ((&) = flip ($)) [infixl 1] > \φ ma mb -> pure φ <*> ma <*> mb & join (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.) http://hackage.haskell.org/package/prelude-generalize-0.4/docs/Prelude-Generalize.html#v:bind2 http://hackage.haskell.org/package/SimpleH-1.2/docs/Algebra-Monad.html#v:bind2 http://hackage.haskell.org/package/definitive-base-2.3/docs/Algebra-Monad-Base.html#v:bind2 your problem become btw then: > doIt = bind2 update a b_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners