У меня есть проект F # с файлом, который определяет тип и модуль следующим образом:
module Domain
type TodoID = TodoID of int
module TodoID = let value (TodoID i) = i
let ti = TodoID 1
let i1 = TodoID.value ti // Works as expected
Компилятор F # автоматически добавляет суффикс "Module" к TodoID, так что полное имя распаковываемого имени функция Domain.TodoIDModule.value
, как и ожидалось (см. FS-1019 ).
Когда я ссылаюсь на функцию из другого файла, открывая модуль Domain
следующим образом, все хорошо:
module DTO_working
open Domain
let ti = TodoID 1
let i1 = TodoID.value ti // Happiness
Однако, когда у меня есть файл, в котором я не открываю модуль, а пытаюсь полностью квалифицировать функцию, я не могу заставить его работать:
module DTO_broken
let ti = Domain.TodoID 1
let i1 = Domain.TodoID.value ti // error FS0039: The field, constructor or member 'value' is not defined.
let i2 = Domain.TodoIDModule.value ti // error FS0039: The value, constructor, namespace or type 'TodoIDModule' is not defined
При наведении указателя мыши на часть value
в Domain.TodoID.value
в Visual Studio полное имя корректно отображается как Domain.TodoIDModule.value
.
Когда я вручную добавляю суффикс Module
и печатаю его везде , оно работает.
Чего мне не хватает? Можно ли ссылаться на функцию с автоматическим c суффиксом «Модуль», не открывая модуль?
Заранее благодарен за любую помощь,
Roland