值限制错误:
let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""
无值限制错误:
let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""
为什么?
所有绑定都是自动泛化的主题。
由于seq<'T>
是一个接口(IEnumable的别名),因此推断出的myOtherFn
的类型为val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
它是泛型的,但是myOtherFn不是函数声明(请阅读上面链接中的ValueRestriction部分),因此自动泛化无法推断出这与val myOtherFn : seq<obj> -> unit
相同。
要强制自动泛化,可以向myOtherFn添加显式参数let myOtherFn args = myFn "" args