В одном модуле у меня есть определенный пользователем тип и рекурсивная функция, которая возвращает строку. Затем я хочу создать функцию, которая создаст объект этого типа и передаст его функции. Вот простой пример кода, у меня есть:OCaml: функция вызова в рамках другой функции
type species =
Animal of string
| Mammal of species
| Fish of species
let rec species_to_string = function
| Animal (x) -> x
| Mammal (x) -> "Mammal ("^(species_to_string x)^")"
| Fish (x) -> "Fish ("^(species_to_string x)^")"
let process() =
let dog = Mammal(Animal("Dog"))
let dogstring = species_to_string dog
print_string dogstring
Однако, когда я пытаюсь скомпилировать это я получаю сообщение об ошибке:
File "test.ml", line 13, characters 1-4:
Error: Syntax error
, где линия 13 является второй последней строкой в моем примере выше ,
Мой код, похоже, не является проблемой. Когда я меняю код на это:
type species =
Animal of string
| Mammal of species
| Fish of species;;
let rec species_to_string = function
| Animal (x) -> x
| Mammal (x) -> "Mammal ("^(species_to_string x)^")"
| Fish (x) -> "Fish ("^(species_to_string x)^")";;
let dog = Mammal(Animal("Dog"));;
let dogstring = species_to_string dog;;
print_string dogstring;;
он компилируется и работает правильно. Но мне нужно поместить последние 3 строки в функцию, чтобы ее можно было вызвать другим модулем. Что я делаю не так?