Generics
F# functions, discriminated unions, records, and object-oriented style expressions can be generic. Generics are a very intrinsic part of F#. Making your code generic can be simple in F# because your code is often implicitly inferred to be generic by the compiler's type inference and automatic generalization mechanisms.
For an explicit generic function or type, we will need to declare the generic type as <'T>
using angle brackets, just like in C#.
type Calculator<'T> or member this.Add<'T>('T x, 'T y)
Note
An important difference with C# is that, in F#, we will need to prefix the name of the compiler arguments with an apostrophe.
Implicit declarations, as said, are inferred automatically by the F# compiler. So basically, we can define the function or the type, and that's it:
let add x y = x + y or member this.Add(x, y) = x + y
There are some limitations with automatic generalizations; for example, if the F# compiler may not be able to generalize...