F#是否有OCaml t型等效物?

F#是否有OCaml t型等效物?,f#,F#,有了OCaml变体,我明白了 /* Reason syntax */ module M = { type t = | Foo | Bar; }; 相当多。F#似乎分享了泄漏到父模块问题中的变体,OCaml人员可以使用模块 F#社区是否也做了类似的事情 module M = type MType = | Baz type T = | None | Foo | Bar(MType) 在F#中,为类型和模块指定相同的名称是有效

有了OCaml变体,我明白了

/* Reason syntax */
module M = {
  type t =
    | Foo
    | Bar;
};
相当多。F#似乎分享了泄漏到父模块问题中的变体,OCaml人员可以使用模块

F#社区是否也做了类似的事情

module M =
    type MType = | Baz
    type T =
      | None
      | Foo
      | Bar(MType)
在F#中,为类型和模块指定相同的名称是有效的,因此更常见的做法是并排编写类型及其相关模块,如下所示:

type M =
    | Foo
    | Bar

module M =

    let f (m: M) = // ...
以前需要向模块中添加属性
[]
,但现在是自动的。

在F#中,为类型和模块指定相同的名称是有效的,因此更常见的做法是这样并排编写类型及其相关模块:

type M =
    | Foo
    | Bar

module M =

    let f (m: M) = // ...

以前需要在模块中添加一个属性
[]
,但现在它是自动的。

据我所知,这种用法在F#世界似乎并不普遍。考虑到必须编写
M.t.Foo
可能会有点尴尬,我认为它对于构建无法从外部访问类型内部的ADT(抽象数据类型)非常有用。就我目前所见,这种用法在F#世界中似乎并不普遍。考虑到必须编写
M.t.Foo
可能会有点尴尬,我认为它对于构建无法从外部访问类型内部的ADT(抽象数据类型)非常有用。