Общий вариант bi fab = (fa, fb)

Есть ли способ написать функцию

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

? В примерах rank-n-types всегда есть что-то гораздо более простое, например

g :: (forall a. a -> a) -> a -> a -> (a, a)
g f a b = (f a, f b)
13
задан aemxdp 27 May 2012 в 06:34
поделиться