I’ll clarify my earlier note: I’m +1 on the idea alone.

The name bind seems contestable (so -1) and I feel ~0 on joinMap. It sounds a bit too much like flatMap which I really dislike, although it’s at least much more accurate.



On Wed, Dec 10, 2014 at 11:02 AM, David Feuer <david.feuer@gmail.com> wrote:

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 <chrisdone@gmail.com> writes:

> 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 =<<foo zot
>
> 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