我有三个应该相同的功能:
let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1)
为什么这些方法的类型不同?
add1和add3为int -> int
,但add2为(int -> int)
。
它们都按预期工作,我只是好奇为什么FSI以不同的方式呈现它们?
答案 0 :(得分:16)
这通常是一个不重要的区别,但如果您真的很好奇,请参阅F#规范的Arity Conformance for Values部分。
我的快速摘要是(int -> int)
是int -> int
的超集。由于add1
和add3
是语法函数,因此推断它们具有更具体的类型int -> int
,而add2
是函数值,因此推断其类型为{ {1}}(并且不能将其视为(int -> int)
)。