Использование открытых объединений вне модуля они были определены в

Почему это работает нормально?

module Account = struct

 type account_type = Current of float | Savings of float

end

let sarah = Account.Current 100.0;;

Хотя последняя строка ниже приводит к ошибке : синтаксическая ошибка ?

module Account = struct

  type 'a account_type = [> `Current of float | `Savings of float ] as 'a

end

let pete = Account.`Current 100.0;;

То есть, почему я не могу использовать тип открытого объединения вне модуль без открытия модуля? Я должен сказать, что обнаружил, что изменение последней строки на:

open Account;;
let pete = `Current 100.0;;

работает нормально, но, очевидно, это обременительно, если я часто использую account_type или мне нужно открыть Account в начале любого раздела кода, где используется account_type , что означает, что я пожертвую абстракцией, которую получу, используя подпись для Account
. Я просмотрел несколько Учебники по OCaml, а также документация INRIA, и я не могу найти упоминания о том, как вы это делаете.
Можно ли избежать необходимости открывать модуль каждый раз, когда я хочу использовать account_type ?

Заранее спасибо,

Зак

5
задан nlucaroni 28 October 2011 в 00:17
поделиться