Не говоря уже о том, должны ли мы использовать единицы измерения для безнитарных понятий, таких как углы, предположим, что я определил degree
и radian
единицы в 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 # или эта функция поддерживается?