我故意在这个函数的末尾添加了x
let myMax x y =
if x > y then x else y
x
Run Code Online (Sandbox Code Playgroud)
我期待x和y参数仍然是'一种类型,但我得到这个签名:
myMax : x:unit -> y:unit -> unit
Run Code Online (Sandbox Code Playgroud)
为什么推断这些参数具有单位类型?
编辑:谢谢@gilles的回答.考虑这两个功能:
let foo x y =
0 // warning
x
val foo : x:'a -> y:'b -> 'a
let foo2 x y =
if x > y then x else y // no warning
x
val foo2 : x:unit -> y:unit -> unit
Run Code Online (Sandbox Code Playgroud)
是什么让两个签名不同?似乎在第二个函数中编译器将比较结果 - x或y-作为单位解释