Как я могу написать функцию, которая берет кортеж функций типа ai -> b -> ai
и возвращает функцию, которая берет кортеж элементов типа ai
, один элемент типа b
и объединяет каждый из элементов в новый набор ai
:
То есть подпись должна быть похожа на
f :: (a1 -> b -> a1, a2 -> b -> a2, ... , an -> b -> an) ->
(a1, a2, ... , an) ->
b ->
(a1, a2, ... , an)
Таким образом:
f (min, max, (+), (*)) (1,2,3,4) 5 = (1, 5, 8, 20)
Точка этого я могу написать:
foldlMult' t = foldl' (f t)
И затем сделайте что-то вроде:
foldlMult' (min, max, (+), (*)) (head x, head x, 0, 0) x
сделать несколько сгибов за один проход. Расширения GHC в порядке.