Я помню, что видел несколько модулей (возможно, в батарейках), которые включали модуль Infix
внутри, который можно было открывать отдельно и только тогда, когда это действительно необходимо. Например,
module Rational =
struct
let add a b = ...
let sub a b = ...
module Infix =
struct
let (<+>) = add
let (<->) = sub
end
end
Таким образом, если бы вы открыли модуль Rational.Infix
, вы не удалили бы (?) Функции с такими же именами, как в Rational
.
Я работаю над проектом, в котором мы используем модули для разграничения types
. Наличие модуля, определяющего только один тип, и управление этим типом помогает в организации; особенно если модули маленькие и иметь отдельный файл нецелесообразно, а варианты типов не имеют смысла.
module Node =
struct
end
module Edge =
struct
end
type 'a tree = { nodes : 'a Node.t; edges : 'a Edge.t; }
Мы также используем их, хотя и в виде отдельных файлов (в сочетании с -mlpack), для всех анализаторов, которые нам нужны для биологических данных - Nexus, Fasta, Phylip и так далее.
Наконец, часто при создании прототипа нового алгоритма мы сначала пишем его в ocaml, а затем работаем над версией C. Мы обычно храним версию ocaml во внутреннем модуле с теми же именами функций.
module Align =
struct
module OCaml =
struct
end
end