Proposal: Add bifunctor related classes to base

Dan Doel dan.doel at gmail.com
Fri Apr 25 18:18:24 UTC 2014


On Fri, Apr 25, 2014 at 1:14 PM, Andreas Abel <andreas.abel at ifi.lmu.de>wrote:

> I am unhappy about the name "bifor".
>
> forM = flip mapM, so the right generalizations would be
>
>      for   = flip map
>      bifor = flip bimap
>
>      forA   = flip mapA   = flip traverse
>      biforA = flip bimapA = flip bitraverse
>

​These definitions make no sense to me. flip bimap and flip bitraverse just
swap the order of the traversal functions passed in.​ Their definition in
bifunctors actually moves the structure to the first argument, which is the
actual point of for(M).

Unfortunately, "for" was taken for "flip traverse" by
> Data.Traversable.  Instead "forA" should have been used.
>

​I don't find this to be unfortunate at all. Sorry. for is useful, and forA
is a worse name (as is forM). Especially as we'll be able to get rid of
sequenceA (and thus bisequenceA) in 7.10 with the improved hierarchy,
leaving no -A functions aside from liftAN. I don't know if we will do that,
but it's _not_ the convention to name these functions fooA. And I'm not in
favor of making it the convention, either.

In my own code, I actually define
>
>   for = flip map
>
> and use it in situations like
>
>   let ys = for xs $ \ x ->
>        long
>        function
>        body
>
> (I never use "for" from Data.Traversable anyway, since I have not
> needed yet an Applicative which is not a Monad.)
>

​And in base we don't do that.​

​In my code, I use (<&>) from lens when I need a flipped fmap:

    let ys = xs <&> \x -> ...

and do use Applicative for.

Proposal:  use "biforA" instead of "bifor".
>

​Negative.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140425/5fe3570b/attachment.html>


More information about the Libraries mailing list