Это работает
open System
let f = Action(fun () -> Unchecked.defaultof<_>)
Но это
let f = System.Action(fun () -> Unchecked.defaultof<_>)
создает ошибку компиляции
Существует несколько типов, называемых "Action", с разными номерами общих параметров. Предоставить экземпляр типа для устранения неоднозначности разрешения типа, например. 'Действие <, _,, _,, _ > '.
Я знаю, что могу исправить это, добавив заполнитель типа типа (System.Action<_>(...)
), но любая идея, почему они ведут себя по-другому?
ИЗМЕНИТЬ
Обнаружено это в спецификации, раздел 14.1.9:
Когда открывается группа декларации модуля или пространства имен
F
, элементы добавляются в среду имен следующим образом:
- Добавьте тип в таблицу TypeNames. Если тип имеет общее имя CLI, такое как
List'1
, тогда добавляется запись как подList
, так иList'1
.
Является ли это поведение реплицированным для полностью квалифицированных типов (с пропущенными параметрами типа)? Это не так.