Вас может заинтересовать Руководство по программированию Caml .Они охватывают именование переменных, но не отвечают на ваши точные вопросы.
Относительно пространства имен конструктора: теоретически вы должны иметь возможность использовать модули в качестве пространств имен, а не добавлять префиксы к именам конструктора.Вы могли бы, скажем, иметь модуль Constructor
и использовать Constructor.None
, чтобы избежать путаницы со стандартным конструктором None
типа option
.Затем вы можете использовать open
или локальный открытый синтаксис ocaml 3.12, или использовать псевдоним модуля module C = Constructor
затем C.None
, когда это полезно, чтобы избежать длинных имен.
На практике люди по-прежнему склонны использоватькороткий префикс, такой как первая буква имени типа с большой буквы, CNone
, чтобы избежать путаницы при работе с двумя модулями с одинаковыми именами конструктора;это часто случается, например, когда вы пишете компилятор и у вас есть несколько проходов, манипулирующих различными типами AST с похожими типами: форма после синтаксического анализа Let
, форма после ввода Let
и т. д.Ваш второй вопрос, я бы предпочел краткость.Вывод означает, что информация о типе может в большинстве случаев оставаться неявной, вам не нужно применять явные аннотации в ваших соглашениях об именах.Часто будет очевидно из контекста - или неважно - какие типы манипулируют, например.remove cond (l1 @ l2)
.Это даже менее полезно, если ваше значение remove
определено внутри подмодуля Condition
.
Редактировать : метки записи имеют такое же поведение области видимости, что и конструкторы типа sum.Если вы определили запись {x: int; y : int}
в подмодуле Coord
, вы получите доступ к полям с foo.Coord.x
вне модуля или с псевдонимом foo.C.x
или Coord.(foo.x)
, используя функцию «локального открытия» 3.12.Это в основном то же самое, что и конструкторы сумм.
До 3.12 вы должны были писать этот модуль в каждом поле записи, например.{Coord.x = 2; Coord.y = 3}
.С 3.12 вы можете просто указать первое поле: {Coord.x = 2; y = 3}
.Это также работает в позиции шаблона.