Почему это работает нормально?
module Account = struct
type account_type = Current of float | Savings of float
end
let sarah = Account.Current 100.0;;
В то время как последняя строка в следующем производит Error: syntax error
?
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
?
Заранее спасибо,
Zach