类型差异很小

Rob*_*sen 11 syntax f#

我有三个应该是平等的功能:

let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1) 
Run Code Online (Sandbox Code Playgroud)

为什么这些方法的类型不同?
add1和add3是int -> int,但add2是(int -> int).他们都按预期工作,我只是好奇为什么FSI以不同的方式呈现它们?

kvb*_*kvb 16

这通常是一个不重要的区别,但如果您真的很好奇,请参阅F#规范的Arity Conformance for Values部分.

我的快速摘要将是它(int -> int)的超集int -> int.由于add1add3是语法函数,它们被推断为具有更具体的类型int -> int,add2而是函数值,因此推断为具有类型(int -> int)(并且不能被视为a int -> int).