2013/12/01: The Haskell function witnessing the universal property of the product...

...is (&&&) from Control.Arrow. It has type Arrow a => a b c -> a b c' -> a b (c, c'), and -> is an arrow.

What confuses me here is that for the dual, the sum, both, the type Either and the universal arrow either :: (a -> c) -> (b -> c) -> Either a b -> c are part of the standard prelude. For the product, however, the type is in the standard prelude, but the universal arrow is not.