Статические методы расширения, поддерживающие ограничения элементов

Мне нужно реализовать статический метод расширения, поддерживающий ограничения членов для некоторых базовых примитивных типов, таких как целые числа, числа с плавающей запятой и т. Д. Вот мой код для целых чисел со знаком:

module MyOperators =
    let inline foo (x : ^T) = (^T : (static member Foo : ^T -> int) (x)) 

    type System.Int32 with 
        static member Foo(x : Int32) = 7 // static extension

Тестовый код:

open MyOperators    
let x = foo 5 // x should be 7

Но компилятор жалуется на ошибку:

Тип 'System.Int32' не поддерживает операторы с именем 'Foo'

Что мне здесь не хватает? Спасибо!

5
задан Stringer 9 September 2010 в 22:54
поделиться