Pair handling combinators
Arie Peterson
ariep at xs4all.nl
Sun Oct 22 11:02:31 EDT 2006
Wolfram wrote:
| >
| > Control.Combinators? Such general beasts as mapFst, mapSnd
| > and >< from Data.Graph.Inductive.Query.Monad could go in
| > there, as could other pair handling combinators like (f <&>
| > g) x = (f x, g x)
|
| Pair handling combinators could go into Data.Tuple.
Many of those combinators can be expressed conveniently using functions
from Control.Arrow.
| > swap (x,y) = (y,x)
> swap = flip (,)
:p
| > pupd f g (x,y) = (f x, g y)
> pupd = (***)
| > mapPair f (x,y) = (f x, f y)
> mapPair = join (***)
| > mapTriple f (x,y,z) = (f x, f y, f z)
Not this one. I sometimes use nested pairs instead of triples to allow use
of the basic arrow combinators.
| > pupd1 f (x,y) = (f x, y)
> pupd1 = first
| > pupd2 g (x,y) = (x, g y)
> pupd2 = second
| > keep1 f p@(x,y) = (x, f p)
> keep1 = (fst &&&)
| > keep2 f p@(x,y) = (f p, y)
> keep2 = (&&& snd)
I'm not opposing introduction of these special tuple combinators, but it
may be good to reuse existing code.
Regards,
Arie
More information about the Libraries
mailing list