Robert Jeppesen
Robert Jeppesen

Reputation: 7877

Small difference in types

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 to why FSI presents them differently?

Upvotes: 11

Views: 314

Answers (1)

kvb
kvb

Reputation: 55184

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).

Upvotes: 16

Related Questions