Как скомпилировать несколько файлов SML?

Как работает компиляция нескольких файлов в Standard-ML? У меня есть 2 файла.

file1.sml:

(* file1.sml *)
datatype fruit = Orange | Apple | None

А также file2.sml:

(* file2.sml *)
datatype composite = Null | Some of fruit

Итак, как вы можете видеть file2.sml использует материал из file1.sml, Как я могу заставить эту вещь скомпилировать?

я использую mosmlc.exe и при компиляции mosmlc file2.sml (что касается этого вопроса):

(* file2.sml *)
use "file1.sml";
datatype composite = Null | Some of fruit

Я получил:

! use "file1.sml";
! ^^^
! Syntax error.

Итак, как бороться с несколькими файлами?

1 ответ

Решение

Вы можете прочитать больше в Руководстве для владельца ML, но в вашем конкретном случае следующая команда должна работать, даже не используя use в исходном коде:

mosmlc -toplevel file1.sml file2.sml

Использование режима структуры

Если вы хотите организовать свой код в структуру, вы можете использовать -structure флаг mosmlc, Например, даны следующие файлы:

Hello.sml

structure Hello =
  struct
    val hello = "Hello"
  end

World.sml

structure World =
  struct
    structure H = Hello

    val world = H.hello ^ ", World!"
  end

main.sml

fun main () =
  print (World.world ^ "\n")

val _ = main ()

Теперь вы можете получить исполняемый файл с именем main, как это:

mosmlc -structure Hello.sml World.sml -toplevel main.sml -o main

И затем запустите это:

$ ./main
Hello, World!

Режим структуры требует, чтобы имена файлов и содержащаяся в них структура совпадали, как в классах Java, и файлы должны иметь одинаковые имена. Вы также можете использовать .sig файлы, которые содержат подписи.

Другие вопросы по тегам