Ограничение значения 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
,
Для принудительного автоматического обобщения вы можете добавить явный параметр в myOtherFnlet myOtherFn args = myFn "" args