Say I've got f :: u -> v -> w
and g :: x -> y -> z
. What I want is h :: (u,x) -> (v,y) -> (w,z)
.
So I could go about this manually:
h (u,x) (v,y) = (f u v, g x y)
But where's the fun in that?
Using (***)
I can get partway there:
(f *** g) :: (u,x) -> (v -> w, y -> z)
But I can't figure out how to get that final mile.