Ведение единиц измерения в типовых разговорах
Если мы определим единицу измерения как:
[<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 #.
Есть ли более идиоматический способ сделать это?