
I think after discussion I’m -1 on any implementation thus discussed.
I think I’d be happiest if we had Monad(return, bind) with `bind :: (a -> m b) -> (m a -> m b)` and `(>>=) = flip bind`, but that’s pretty infeasible. : )
On Thu, Dec 11, 2014 at 3:30 PM, Edward Kmett
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
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
mailto: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
mailto: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 mailto:Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
_________________________________________________ Libraries mailing list Libraries@haskell.org mailto:Libraries@haskell.org http://www.haskell.org/__mailman/listinfo/libraries http://www.haskell.org/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@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@gu.se http://www2.tcs.ifi.lmu.de/~abel/ _______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries