Я пытаюсь скомпилировать следующий код с помощью ocamlc.Обобщение типа переменных OCaml
type 'a splitter = {name: string; decision_function : 'a -> bool}
let splitter12a = {name="x1>x2"; decision_function=(fun x -> x.(1)>x.(2))};;
let generate_splitter i j = {name="x"^string_of_int(i)^">x"^string_of_int(j); decision_function=(fun x -> x.(i) > x.(j))} ;;
let splitter12 = generate_splitter 1 2;;
Однако компилятор жалуется:
File "error.ml", line 7, characters 17-38:
Error: The type of this expression, '_a array splitter,
contains type variables that cannot be generalized
Я не понимаю, почему я могу объявить специализированный splitter12a
тогда generate_splitter
не может создавать специализированные разветвители.
Спасибо! Какое самое достойное решение? Я не знаком с расширением «eta» и специализирующем сплиттер (обходной путь, который я использую сейчас) не является жизнеспособным решением. – RUser4512
В действительности нет прямого обходного пути, но см. Мое редактирование. –