
On 2016-12-23 07:02 PM, Baldur Blöndal wrote:
Let's see if any of these are useful (a lot more at https://ghc.haskell.org/trac/ghc/ticket/13026)
(||||) :: (f a -> b) -> (g a -> b) -> ((Sum f g) a -> b) f |||| g = \case InL fa -> f fa InR ga -> g ga
The corresponding destructor function in Data.Either is called either: either :: (a -> c) -> (b -> c) -> Either http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Either.html#t:Eith... a b -> c Thus the most logical name for the Sum destructor would be sum. You can always import Data.Functor.Product qualified as Product to avoid clashes. In the same vein, I propose adding uncurry :: (f a -> g a -> b) -> Product f g a -> b uncurry f (Pair a b) = f a b
(&&&&) :: (a -> f b) -> (a -> g b) -> (a -> (Product f g) b) (f &&&& g) a = f a `Pair` g a
I'm not fond of that name. Also, f &&&& g == uncurry Pair . (f &&& g)