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

Greg Weber greg at gregweber.info
Wed Dec 10 17:08:18 UTC 2014


On Wed, Dec 10, 2014 at 8: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?
>

As a default rule, I think every operator should have a named function.
This is because symbols have no inherit meaning, but words do.
Math is the exception to the rule. Basic math is universal: someone coming
from any background will immediately recognize (+), (-), etc.
Monad operators only seem universal once you have been programming Haskell
for several years :)


>
> 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/20141210/cfdd461b/attachment.html>


More information about the Libraries mailing list