Итак, у меня есть список функций двух аргументов типа [a -> a -> a]
Я хочу написать функцию, которая возьмет список и скомпонует их в цепочку функций, которая принимает длину + 1аргументы составлены слева.Например, если у меня есть [f,g,h]
всех типов [a -> a -> a]
, мне нужно написать функцию, которая дает:
chain [f,g,h] = \a b c d -> f ( g ( h a b ) c ) d
Также, если это помогает, функции являются коммутативными в своих аргументах (то есть f x y = f y x
длявсе x y
).
Я могу сделать это внутри понимания списка, учитывая, что я знаю количество рассматриваемых функций, это будет почти точно так же, как определение.Это растяжение от фиксированного числа функций до динамического числа, которое поставило меня в тупик.
Это то, что я до сих пор:
f xs = f' xs
where
f' [] = id
f' (x:xs) = \z -> x (f' xs) z
Я думаю, логика идет по правильному пути, он просто не проверяет тип.
Заранее спасибо!