値制限エラー:
let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""
値制限なしエラー:
let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""
なんで?
値制限エラー:
let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""
値制限なしエラー:
let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""
なんで?
すべてのバインディングは自動汎化の対象です。
seq<'T>
はインターフェイス (IEnumrable のエイリアス) であるため、推論される型はmyOtherFn
ジェネリック
val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
ですが、 myOtherFn は関数宣言ではありません (上記のリンクの値制限の部分を参照)。そのため、自動一般化ではこれが同じであると推測できません。としてval myOtherFn : seq<obj> -> unit
。
自動一般化を強制するには、明示的なパラメーターを myOtherFn に追加します。
let myOtherFn args = myFn "" args