避免模​​块和类型定义出现在程序集的两个部分中的错误

sdg*_*sdh 4 f#

假设我有一个这样的项目:

// Types.fs

namespace App

type Foo =
  {
    X : int
  }
Run Code Online (Sandbox Code Playgroud)
// Foo.fs

module App.Foo

let doubleIt (foo : Foo) =
  {
    X = foo.X * 2
  }
Run Code Online (Sandbox Code Playgroud)

然后我收到这样的错误:

Types.fs(3,6): 错误 FS0250: 在此程序集的两个部分的命名空间“App”中出现名为“Foo”的模块和类型定义

但是,如果我将所有内容都放在一个文件中,它会起作用:

// Everything.fs

namespace App

type Foo =
  {
    X : int
  }

module Foo =

  let doubleIt (foo : Foo) =
    {
      X = foo.X * 2
    }
Run Code Online (Sandbox Code Playgroud)

但对我来说,这些似乎是一回事;我不想把所有东西都组织成一个大文件。

  • 这里发生了什么?
  • 为什么我不能把模块放到另一个文件中?
  • 组织此代码的惯用方法是什么?

dotnet --version
3.1.403
Run Code Online (Sandbox Code Playgroud)

Jim*_*oye 5

[FS0250] - 需要显式添加“ModuleSuffix”

所以,如果你想将类型和模块保存在单独的文件中,那么用

[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
Run Code Online (Sandbox Code Playgroud)

如果你把它们放在同一个文件中,那就为你完成了。