Как я могу определить член расширения в единицах измерения F #?

Не говоря уже о том, должны ли мы использовать единицы измерения для безразмерных такие понятия, как углы. Предположим, я определил единицы измерения градусов и радиан в F #

type [<Measure>] degree =
    static member ToRadians (d:float<degree>) : float<radian> = d * (Math.PI * 1.<radian>) / 180.0<degree>
and [<Measure>] radian =
    static member ToDegrees (r:float<radian>) : float<degree> = r * 180.0<degree> / (Math.PI * 1.<radian>)

. Я могу использовать их относительно легко, например

4.0<degree> |> degree.ToRadians

. Кажется, что члены расширения были бы еще удобнее. Так что я мог бы просто сказать

let d = 4.0<degree>
let r = d.ToRadians()

Но я не могу определить член расширения очевидным способом

type float<degree> with
    member degrees.ToRadians() = degree.ToRadians(degrees)

... это вызывает следующую ошибку

error FS0010: Unexpected identifier in type name. Expected infix operator, quote symbol or other token.

Есть ли синтаксический трюк для членов расширения в единицах измерения в F #, или поддерживается ли эта функция?

9
задан Sebastian Good 22 August 2011 в 10:39
поделиться