Ограничение значения F# для seq<obj>, но не для списка<obj>?

Ошибка ограничения значения:

let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""

Ошибка ограничения без значения:

let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""

Зачем?

1 ответ

Все привязки являются предметом автоматического обобщения.

поскольку seq<'T> это интерфейс (псевдоним для IEnumrable), предполагаемый тип для myOtherFn было бы
val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
что является общим, но myOtherFn не является объявлением функции (см. раздел " Ограничение значений" в ссылке выше), поэтому автоматическое обобщение не может сделать вывод, что это то же самое, что и val myOtherFn : seq<obj> -> unit,

Для принудительного автоматического обобщения вы можете добавить явный параметр в myOtherFn
let myOtherFn args = myFn "" args

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