Функтор отображает модулей на модули. Целое число не является модулем, поэтому его нельзя использовать в качестве параметра функтора.
Вам необходимо определить тип модуля:
module type WITH_INTEGER = sig
val integer : int
end
module PrintInteger =
functor (Int:WITH_INTEGER) -> struct
let print_my_integer () = print_int Int.integer
конец
Конечно, если вашему модулю не нужно предоставлять типы, которые зависят от значения целого числа (или вам нужно предоставить множество значений, зависящих от этого целого числа), вам, вероятно, лучше использовать простую функцию, которая принимает это целое число в качестве аргумента:
let my_function integer =
let data = complex_precomputations integer in
function arg -> do_something_with arg data
Это позволяет вам выполнять сложные предварительные вычисления только один раз для целого числа (когда вы передаете его функции).