bind :: Monad m => (a -> m b) -> m a -> m b

Edward Kmett ekmett at gmail.com
Thu Dec 11 20:30:32 UTC 2014


My sentiments are very similiar here.

I find myself a weak -1 on this, because "bind" has the flipped semantics
to many folks, joinMap is ugly and far longer than the alternative, (=<<)
already exists, it becomes a fresh way to confuse users with monadic
syntax, and it takes another precious name from the namespace.

The analogies for fmap and ap strike me as false equivalences, fmap came
long before the applicative sugar for (<$>), the same with ap, which long
predates (<*>), and which serves canonically as a default definition for it.

-Edward


On Thu, Dec 11, 2014 at 3:43 AM, Andreas Abel <andreas.abel at ifi.lmu.de>
wrote:

> On 10.12.2014 17:33, John Lato wrote:
>
>> I don't really understand why people want this. What's wrong with (=<<)
>> ?  I kind of feel like a named function should be no longer than that.
>>
>
> You are right, we do not need a alphabetic version of every operator. We
> do not have
>
>   plus = (+)
>
> either.  Why take another good name from the user, just to avoid using an
> operator in parentheses?
>
> I am -1 on the whole business here.
>
> Cheers,
> Andreas
>
>
>> I don't object, especially if others think it's useful (and many clearly
>> do), but I guess it's not to my taste.
>>
>>
>> On 08:02, Wed, Dec 10, 2014 David Feuer <david.feuer at gmail.com
>> <mailto:david.feuer at 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 at gmail.com <mailto:chrisdone at 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 at haskell.org <mailto:Libraries at haskell.org>
>>     http://www.haskell.org/mailman/listinfo/libraries
>>
>>     _________________________________________________
>>     Libraries mailing list
>>     Libraries at haskell.org <mailto:Libraries at haskell.org>
>>     http://www.haskell.org/__mailman/listinfo/libraries
>>     <http://www.haskell.org/mailman/listinfo/libraries>
>>
>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://www.haskell.org/mailman/listinfo/libraries
>>
>>
>
> --
> Andreas Abel  <><      Du bist der geliebte Mensch.
>
> Department of Computer Science and Engineering
> Chalmers and Gothenburg University, Sweden
>
> andreas.abel at gu.se
> http://www2.tcs.ifi.lmu.de/~abel/
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20141212/70faf9dc/attachment-0001.html>


More information about the Libraries mailing list