#f#
#f#
Вопрос:
Предположим, у меня есть такой проект, как этот:
// Types.fs
namespace App
type Foo =
{
X : int
}
// Foo.fs
module App.Foo
let doubleIt (foo : Foo) =
{
X = foo.X * 2
}
Затем я получаю сообщение об ошибке, подобное этому:
Типы.fs (3,6): ошибка FS0250: модуль и определение типа с именем ‘Foo’ встречаются в пространстве имен ‘App’ в двух частях этой сборки
Однако, если я помещу все в один файл, это сработает:
// Everything.fs
namespace App
type Foo =
{
X : int
}
module Foo =
let doubleIt (foo : Foo) =
{
X = foo.X * 2
}
Но мне это кажется одним и тем же, и я не хочу организовывать все в один большой файл.
- Что здесь происходит?
- Почему я не могу поместить модуль в другой файл?
- Каков идиоматический способ организации этого кода?
dotnet --version
3.1.403
Ответ №1:
[FS0250] — ‘ModuleSuffix’ должен быть добавлен явно
Итак, если вы хотите сохранить тип и модуль в отдельных файлах, затем украсьте имя модуля
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
Если вы поместите их в один и тот же файл, это будет сделано за вас.