Тип ('a -> 'a -> 'b) -> 'a -> ('a -> 'b) * 'b
- это тип функции, которая принимает два аргумента.
Первый аргумент - это сама функция, которая принимает два значения произвольного типа 'a
и возвращает элемент некоторого произвольного типа 'b
(который также может быть 'a
, т.е. он не ограничен).
Второй аргумент - это значение типа 'a
, которое принимается функцией, передаваемой в качестве первого аргумента.
Возвращаемое значение - пара. Первая составляющая пары - это унарная функция, которая принимает аргумент типа 'a
и возвращает значение типа 'b
. Вторая составляющая является значением типа 'b
.
Вы должны думать об этой задаче, как о головоломке. У вас есть только два инструмента: функция ('a -> 'a -> 'b)
и значение типа 'a
. Так что вопрос в том, какие операции вы должны выполнить с этими двумя значениями, чтобы получить результат
Подсказка1: начать с оператора приложения функции.
Подсказка2: ответ очень прост и мал, поэтому, если вы получаете что-то очень большое, то вы на неверном пути.