let add a b = a + b
There is a question. What type of these arguments? In F# interactive console, it's int, so othre numeric types is not accepted for this function.
> let add a b = a + b;; val add : int -> int -> int > add 2 3;; val it : int = 5 > add 2.0 3.0;; add 2.0 3.0;; ----^^^ stdin(3,5): error FS0001: This expression was expected to have type int but here has type floatHow do we make the function acceptable other numeric types?
Generics? Generics is for classes and class members. In this sample, there is only a function, no generics are needed. Well, are there any features like "generics for functions"? The answer is inline keyword.
inline keyword enables this feature.
> let inline add a b = a + b;; val inline add : ^a -> ^b -> ^c when ( ^a or ^b) : (static member ( + ) : ^a * ^b -> ^c) > add 2 3;; val it : int = 5 > add 2.0 3.0;; val it : float = 5.0 > add 2 3.0;; add 2 3.0;; ------^^^ stdin(7,7): error FS0001: The type 'float' does not match the type 'int'But arguments still must be same types.