私はfsharp型推論で作業していますが、どのように動作するのか理解しようとしています。それはなぜですかF#型推論
List.filter List.head
はタイプbool list list -> bool list list
ですか?
私はfsharp型推論で作業していますが、どのように動作するのか理解しようとしています。それはなぜですかF#型推論
List.filter List.head
はタイプbool list list -> bool list list
ですか?
List.filter
は(ちょうどFSIにList.filter;;
を入力してください)タイプがあります。
> List.filter;;
val it : (('a -> bool) -> 'a list -> 'a list)
ので、それが今、あなたは
> List.head;;
val it : ('b list -> 'b)
(とそれを養う'a list -> 'a list
で'a -> bool
と結果を取ります別の'a
だから私はそれを改名しました)そして今あなたは持っています:
'a -> bool ~ 'b list -> 'b
あなたはこれを統一して見ることができます:
'a ~ 'b list ~ bool list
(左手側から)(->
の右手の側から)
'b ~ bool
しかし、これがすべて一緒になって答えが得られます。F#の型推論はあなたに与えます: 'a list -> 'a list
~ ('b list) list -> ('b list) list
~ (bool list) list -> (bool list) list
~ bool list list -> bool list list
どのようなタイプがあると思いますか? –