Частные значения в модуле OCaml? - PullRequest
0 голосов
/ 24 февраля 2020

Возможно ли иметь привязку let (будь то функция, значение et c.), Которая является частной для его модуля и не видна снаружи?

Допустим, у нас есть A.ml:

let exported = 1
let local = 2

Я только хочу, чтобы exported был доступен из других модулей. B.ml:

let a = A.exported
let error = A.local (* This should error *)

Аналогично тому, что let%private делает в Причина .

Ответы [ 2 ]

4 голосов
/ 24 февраля 2020

Это мотивация для файлов подписи и mli: они позволяют скрыть информацию для внешнего мира и раскрыть только соответствующую часть вашего API, а не детали реализации. В вашем случае это будет выглядеть как

(* A.ml *)
let exported = 1
let local = 2

и

(* A.mli *)
val exported: int

Тогда только exported будет видно за пределами A.ml.

2 голосов
/ 24 февраля 2020

Да, именно для этого подписи модуля и на уровне файла .mli-файл предназначен для.

Вкратце объясните, добавьте A.mli, затем поставьте определения, которые вы хотите экспортировать в него:

val exported : int
...