Существует ли безопасный тип записи функции
bi f a b = (f a, f b)
чтобы можно было использовать его следующим образом:
x1 :: (Integer, Char)
x1 = bi head [2,3] "45"
x2 :: (Integer, Char)
x2 = bi fst (2,'3') ('4',5)
x3 :: (Integer, Double)
x3 = bi (1+) 2 3.45
? В примерах ранга-типа всегда есть что-то гораздо более простое, чем
g :: (forall a. a -> a) -> a -> a -> (a, a)
g f a b = (f a, f b)