[Haskell-cafe] Distributing monadic(?) functions across dyadic functions

Dean Herington heringtonlacey at mindspring.com
Sun Apr 2 16:22:29 EDT 2006

At 11:58 AM -0700 4/2/06, Jared Updike wrote:
>Is there a common way (standard libs, higher order) to express the
>lambda part below? It's not particulary complicated but I think it is
>not higher-order enough
>>  unionBy (\x y -> fst x == fst y) listOfPairs1 listOfPairs2
>Something like "distribute fst (==)" where
>>  distribute f op x y = f x `op` f y
>would leave
>>  unionBy (distribute fst (==)) listOfPairs1 listOfPairs2
>I imagine something involving Arrows and/or zip/curry/uncurry but I just
>can't see it. Is this a case of trying to make something more complicated
>than it is?
>   Jared.

I think you've reached sufficient higher-order-ness.  Others on the 
list have offered your function in a slightly different form:

>  f `on` g = \x y -> g x `f` g y
>  unionBy ((==) `on` fst) listOfPairs1 listOfPairs2

More information about the Haskell-Cafe mailing list