Ведение единиц измерения в типовых разговорах

Если мы определим единицу измерения как:

[<Measure>] type s

а затем целое число с мерой

let t = 1<s>

а затем преобразовать его в число с плавающей точкой

let r = float t

Мы видим, чтоr = 1.0 без типа меры. Это кажется очень странным, так как вся информация о мерах была потеряна.

Вы можете использоватьLanguagePrimitives.FloatWithMeasure преобразовать обратно в плавающее с чем-то вроде

let inline floatMeasure (arg:int<'t>) : (float<'t>) =
    LanguagePrimitives.FloatWithMeasure (float arg)

который обеспечивает правильные типы, но это не похоже на правильное решение, как документы для единиц измерения (http://msdn.microsoft.com/en-us/library/dd233243.aspx) говорят

Однако для написания слоев взаимодействия существуют также некоторые явные функции, которые вы можете использовать для преобразования безразмерных значений в значения с единицами измерения. Они находятся в модуле Microsoft.FSharp.Core.LanguagePrimitives. Например, чтобы преобразовать число с плавающей запятой в число с плавающей запятой, используйте FloatWithMeasure, как показано в следующем коде.

Что, по-видимому, говорит о том, что этой функции следует избегать в коде F #.

Есть ли более идиоматический способ сделать это?

Ответы на вопрос(2)

Ваш ответ на вопрос