有了OCaml变体,我明白了
/* Reason syntax */
module M = {
type t =
| Foo
| Bar;
};
有点。 F#似乎分享了泄漏到父模块问题中的变体,OCaml的人们都在使用模块。
F#社区是否做类似的事情?
module M =
type MType = | Baz
type T =
| None
| Foo
| Bar(MType)
答案 0 :(得分:3)
在F#中,为类型和模块赋予相同的名称是有效的,因此更常见的是,像这样并排编写类型及其相关模块:
type M =
| Foo
| Bar
module M =
let f (m: M) = // ...
过去必须在模块中添加属性[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
,但这是自动的。