Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Small difference in types

Tags:

syntax

f#

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?

like image 228
Robert Jeppesen Avatar asked Feb 23 '11 15:02

Robert Jeppesen


1 Answers

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

like image 119
kvb Avatar answered Nov 03 '22 23:11

kvb