Вы получаете int
и функцию int*int -> 'a list
.Вы должны вернуть 'a list
.Поэтому все, что вам нужно сделать, это вызвать функцию, которую вы получаете с помощью (x, x) (где x - это int, который вы получаете) и вернуть результат этого.Итак,
fun foo x f = f (x,x)
Обратите внимание, что это не единственная возможная функция с типом int -> (int*int -> 'a list) -> 'a list
.Например, функции fun foo x f = f (x, 42)
и fun foo x f = f (23, x)
также будут иметь этот тип.
Редактировать:
Чтобы обеспечить точное соответствие типа, добавьте аннотацию типа, чтобы ограничить возвращаемый тип f:
fun foo x (f : int*int -> 'a list) = f (x,x)
Обратите внимание, однако, что для этого нет реальной причины.Эта версия ведет себя точно так же, как и прежде, за исключением того, что она принимает только функции, которые возвращают список.