F#ポリモーフィックタイプ

f# polymorphism type-inference
F#ポリモーフィックタイプ

以下は、カレースタイルの多相型システムで予想されるように、正常に動作します。 恒等関数は実際には無限の関数ファミリーであり、それぞれのタイプ ‘a→’ aに対して1つです:

let f x = x
printfn "%A" (f 2)
printfn "%A" (f 3.4)

しかし、もう少し複雑なことを行おうとすると、3行目で失敗します。「この式はint型であるはずですが、ここではfloat型です」:

let f x = string x
printfn "%A" (f 2)
printfn "%A" (f 3.4)

(ただし、2行目をコメントアウトすると、3行目が期待どおりに機能します。)

先験的に、不特定の型が事実上ジェネリックであるカリースタイルを振る舞うか、または関数の1つのバージョンのみをロックダウンするかのいずれかの型推論を期待していましたが、私が見る限り、最初の前者を実行しています後者と後者の場合。 私は拾っていない行動の背後にあるロジックがあると推測しています。 何が足りないの?

  4  1


ベストアンサー

「帽子の種類」については、ここで標準外のことが行われています。 「文字列」などの一部のF#関数には、静的最適化制約または特定のメンバー関数の存在に基づいた型があります。 これらは「インライン」関数でのみ一般化できます。そうでない場合は、使用法に基づいて単相型を取り、それがここで行われています。

6


タイトルとURLをコピーしました