类型差异很小

时间:2011-02-23 15:43:34

标签: syntax f#

我有三个应该相同的功能:

let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1) 

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

1 个答案:

答案 0 :(得分:16)

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

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