私はまだ、F# がどのように関数と型を一般化するか (または一般化しないか) について頭を悩ませようとしています。
let min(a, b) = if a < b then a else b
let add(a, b) = a + b
let minInt = min(3, 4)
let minFloat = min(3.0, 4.0) // works!
let addInt = add(3, 5)
let addFloat = add(3.0, 5.0) // error: This expression was expected to have type
// int but here has type float
ここで、 min はジェネリック型'a * 'a -> 'a (requires comparison)
を持ち、 add は具象型を持ちint * int -> int
、プログラムでの最初の使用から明らかに推測されます。どちらも同じように宣言され、使用されますが、一般化の違いはなぜでしょうか?
add の場合、関数をインラインで宣言することで問題を回避できることを理解しています。これにより、ジェネリック型定義が取得されます'a * 'b -> 'c (requires member (+))
。他の。