Just to add to the other answers, underneath the hood a closure is returned when you curry the function.
[Serializable]
internal class addToFive@12 : FSharpFunc
{
// Fields
[DebuggerBrowsable(DebuggerBrowsableState.Never), CompilerGenerated, DebuggerNonUserCode]
public int x;
// Methods
internal addToFive@12(int x)
{
this.x = x;
}
public override int Invoke(int y)
{
return Lexer.add(this.x, y);
}
}