Итак, у меня есть список функций из двух аргументов типа [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
Также, если это помогает, функции коммутативны по своим аргументам (т.е. fxy = fyx
для всех xy
).
Я могу сделать это внутри понимания списка, учитывая, что я знаю количество рассматриваемых функций, это было бы почти точно так же, как определение. Меня озадачил переход от фиксированного числа функций к динамическому.
Вот что у меня есть на данный момент:
f xs = f' xs
where
f' [] = id
f' (x:xs) = \z -> x (f' xs) z
Я думаю, что логика правильная, она просто не проверяет типы.
Заранее спасибо!