[GHC] #974: Add partitionEithers, lefts, rights to Data.Either
Henning Thielemann
lemming at henning-thielemann.de
Thu Nov 9 11:55:38 EST 2006
On Thu, 9 Nov 2006, Ross Paterson wrote:
> On Thu, Nov 09, 2006 at 04:29:09PM +0100, Henning Thielemann wrote:
> > On Thu, 9 Nov 2006, Ross Paterson wrote:
> > > I'd suggest also having the following variant, by analogy with mapMaybe:
> > >
> > > -- | Map values and separate the 'Left' and 'Right' results.
> > > mapEither :: (a -> Either b c) -> [a] -> ([b], [c])
> > > mapEither f = foldr (add . f) ([], [])
> > > where add (Left b) (bs, cs) = (b:bs, cs)
> > > add (Right c) (bs, cs) = (bs, c:cs)
> >
> > After my turnaround
> > http://www.haskell.org/pipermail/libraries/2006-November/006204.html
> > that's what I called partitionEither. From a 'map' function I expect a
> > similarity to 'fmap', e.g. that the main input and the output have the
> > same type constructor (here []).
>
> As I said before, it's a bit of both map and partition, in the same way
> that mapMaybe combines map and filter. But mapMaybe is already there,
> and this naming follows it.
I can write
mapMaybe f . mapMaybe g
but not
mapEither f . mapEither g
that's why I think, this kind of mapEither is not as much 'map' as
'mapMaybe' is. :-)
More information about the Libraries
mailing list