Модуль и класс с тем же именем

Это разрешено:

type Test = class end

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
module Test = begin end

Но это не так:

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
module Test = begin end

type Test = class end

Зачем?

Во втором случае ошибка: Дублирующее определение типа или модуля "Тест".

Я хотел бы иметь возможность определить некоторые публичные [<Literal>] константы, которые требуются для типа и важны для пользователей типа внутри модуля с тем же именем.

1 ответ

Решение

Вы можете открыть объявление типа, закрыть его и открыть позже, примерно так:

type Test = class end

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>]
module Test =
    [<Literal>]
    let myLiteral = "myLiteral"

type Test with
    static member test = ()

Я использую этот трюк все время;)

Другие вопросы по тегам