Вот подсказка, только.
Функция foo
принимает два аргумента, так как его тип a -> a -> a
. Однако foo arg1 arg2 arg3 arg4
передает четыре аргумента. Как это может работать?
Ну, мы можем интерпретировать foo arg1 arg2 arg3 arg4
, как
let bar = foo arg1 arg2
in bar arg3 arg4
Это может работать только тогда, когда результат foo arg1 arg2
является функцией (bar
) ожидает два аргумента. Но мы знаем, что тип bar
должен быть a
от типа foo
. Следовательно, переменная типа a
должна быть выбрана как тип двоичной функции, то есть что-то вроде b -> c -> d
.
Подводя итог, если foo :: a -> a -> a
, то мы также имеем
foo :: (b -> c -> d) -> (b -> c -> d) -> (b -> c -> d)
Что вы пробовали? – chi
arg1, arg2, arg3, arg4 :: a -> a -> Bool – azorge
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что это домашняя работа. Это не вопрос программирования. – mb14