此代码无法编译:
let f = fun x y -> x <<< y // bit shift
let g = fun x y -> x <<< y
[<EntryPoint>]
let main _ =
printfn "%d" <| f 1 10
printfn "%d" <| f 1L 10 // error
printfn "%d" <| g 1L 10
0
(7,21): error FS0001: This expression was expected to have type
int
but here has type
int64
我猜统一器修复了与它们第一次出现相关联的类型f
参数g
。是什么支配了这个过程?我认为这与“价值限制”非常相似,但f
已经g
被 eta 扩展了!这是一个难题。
我肯定会想象在整数类型上键入具有临时多态性的预定义运算符背后有一些黑魔法,但这只是我的猜测。任何信息表示赞赏。