
joinMap looks to me like the best name, because it does just what it says
on the box:
join . fmap f $ m
= (m >>= return . f) >>= id --Functor/Monad law
= m >>= (\x -> return (f x) >>= id) --associativity
= m >>= (\x -> f x) --left identity
= m >>= f --eta reduction
= f =<< m
Christopher Done
Is this defined anywhere in base, and if not could it be placed in Control.Monad? I often find myself writing:
fmap (mu bar) (foo zot)
Then I decide to change the type of x, so instead I want to just write:
bind (mu bar) (foo zot)
Which is just like fmap but the function can run in the monad. Similar to traverse:
(Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
As someone who isn’t a fan of operators, I generally am appreciative of alternative regular plain English word versions of functions, which I find easier to type, read and edit. Currently without defining such a handy name, I have to transform the code to this:
mu bar =<
The name for this function is a no-brainer:
bind :: Monad m => (a -> m b) -> m a -> m bbind = (=<<)
I'm -1 on the *name* `bind`, because as others have mentioned, I feel bind has the same type as (>>=). That said, I'm +1 on the *idea* - if we can find a better name. `joinMap` doesn't seem too bad, as was recently suggested, but I'll settle on anything other than `bind` -- ocharles _______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries