Some F# features require a bit of interop code to make it easily consumable in C#.
We can define a C# function by writing the following piece of code:
public class CSharpExample { public static int Add(int x, int y = 1) { return x + y; } }
We can call the function in C# by writing the following piece of code:
var a = CSharpExample.Add(10) var b = CSharpExample.Add(10, 20);
If we try the same with F#, it will work as well:
let a = CSharpExample.Add(10) let b = CSharpExample.Add(10, 20)
Now, the other way around; a method defined in F# using the F# flavor of optional parameters is as follows:
type FSharp = static member Add(x, ?y) = let y = defaultArg y 1 x + y
We can happily use it like this in F#:
let a = FSharp.Add(10) let b = FSharp.Add(10, 20)
If we try to use this in C#, then we will see that it's not exposed as an optional parameter, so we will...