4
以下工作正常,正如人們所期望的那樣,在Curry風格的多態類型系統中,例如,身份功能實際上就是功能的無限系列,每種類型「A - >」一:F#多態類型
let f x = x
printfn "%A" (f 2)
printfn "%A" (f 3.4)
但是,當我們嘗試做一些稍微複雜一些,它不能在第三行,「這表達預計將有int類型,但是在這裏有float類型「:
let f x = string x
printfn "%A" (f 2)
printfn "%A" (f 3.4)
(但註釋掉第二行使得三線工作,符合市場預期。)
先驗的,我本來期望類型推論要麼表現出未指定類型實際上是a的Curry風格通用的,或者只能鎖定一個版本的函數,但據我所知,它在第一種情況下執行前者,在第二種情況下執行後者。我猜測這種行爲背後有一些邏輯,我只是沒有理解。我錯過了什麼?
只需要詳細說明一下,這意味着'let inline f x = string x'將使第二個示例的行爲與第一個示例類似。 – kvb 2010-12-19 16:45:17