Overload
If you can live with defining a function as a class method, you can use the usual .NET method overload:
type Foo =
static member Bar (x : int) = sprintf "32-bit integer: %i" x
static member Bar (x : int64) = sprintf "64-bit integer: %i" x
FSI Examples:
> Foo.Bar 42;;
val it : string = "32-bit integer: 42"
> Foo.Bar 42L;;
val it : string = "64-bit integer: 42"
Discriminative Unions
, . , int
, int64
:
type DUInt =
| NormalInt of int
| BiggerInt of int64
, , Int32
int64
, , System
.
, :
let foo = function
| NormalInt x -> sprintf "32-bit integer: %i" x
| BiggerInt x -> sprintf "64-bit integer: %i" x
DUInt -> string
.
FSI:
> foo (NormalInt 42);;
val it : string = "32-bit integer: 42"
> foo (BiggerInt 42L);;
val it : string = "64-bit integer: 42"