"Categories, Types and Structures" 2.3.1 Definition (Exponential)
http://d.hatena.ne.jp/bonotake/20071028/1193584460
haskellでちょっとやってみた。
evalとカリー。
(***) :: (f -> f1) -> (g -> g1) -> (f,g) -> (f1, g1)
(f *** g) (a, b)= (f a, g b)eval :: (a -> b, a) -> b
eval (ba, a) = ba af :: (Int, Int) -> Int
f (x ,y) = x * yf2 :: (Int, Int) -> Int
f2 = eval. ((curry f) *** id)h :: Int -> Int -> Int
h x y = x * yh2 :: Int -> Int -> Int
h2 = curry $ eval.(h *** id)