I'd like to use statically resolved type parameters with some extension methods I added to built-in types, like float32
and int32
, so I tried the following:
module Foo =
type System.Single with
static member Bar x = x + 1.0f
let inline bar (x : ^a) =
(^a : (static member Bar : ^a -> ^a) x)
open Foo
[<EntryPoint>]
let main argv =
System.Console.WriteLine (bar 1.0f) (* Compilation fails here *)
0
The compiler complains that The type 'float32' doesn't support the operator 'Bar'
. What am I doing wrong?