F# 中的 DU 是否有等效于 [<RequireQualifiedAccess>] 属性的 OCaml?

Is there an OCaml equivalent of the [<RequireQualifiedAccess>] attribute for DUs in F#?

我更喜欢在 F# 程序中使用

[<RequireQualifiedAccess>]
type MyType =
    | FirstOption of string
    | SecondOption of int

所以在使用 MyType 的代码中我不得不写 MyType.FirstOption 而不是 FirstOption。有没有办法在 OCaml 中强制执行此操作?

您可以通过在模块中定义类型来获得类似的效果。

$ ocaml
        OCaml version 4.02.1

# module MyType = struct
    type t = FirstOption of string | SecondOption of int
    end    ;;
module MyType : sig type t = FirstOption of string | SecondOption of int end
# MyType.FirstOption "abc";;
- : MyType.t = MyType.FirstOption "abc"
# FirstOption "abc";;
Error: Unbound constructor FirstOption
#

如果你这样做,类型的名称(如你所见)是 MyType.t。