Which is the most idiomatic way to "lift up" by some transformation both arguments of a binary function in Haskell? Let this operator be named "lift", so I expect it's type will be
lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c)
and a naive definition will be
lift t f = \x y -> f (t x) (t y)