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

Christopher Done chrisdone at
Tue Dec 9 21:44:31 UTC 2014

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

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 = (=<<)

For comparison, the not-very-pleasant <$> and <*> each have word
alternatives, fmap and ap. Even <> has mappend.

I don’t hold much hope for this, Haskellers love operators as much as
Perl programmers so few on this list will see the value in plain old
words, but at least I can link to this email in the archives for
future reference.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list