开发者

Small difference in types

开发者 https://www.devze.com 2023-02-12 18:00 出处:网络
I have three functions that ought to be equal: let add1 x = x + 1 let add2 = (+) 1 let add3 = (fun x -> x + 1)

I have three functions that ought to be equal:

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

Why do the types of these methods differ?

add1 and add3 are int -> int, but add2 is (int -> int). They all work as expected, I am just curious as开发者_如何学C to why FSI presents them differently?


This is typically an unimportant distinction, but if you're really curious, see the Arity Conformance for Values section of the F# spec.

My quick summary would be that (int -> int) is a superset of int -> int. Since add1 and add3 are syntactic functions, they are inferred to have the more specific type int -> int, while add2 is a function value and is therefore inferred to have the type (int -> int) (and cannot be treated as an int -> int).

0

精彩评论

暂无评论...
验证码 换一张
取 消