Mantener unidades de medida en conversaciones de tipo
Si definimos una unidad de medida como:
[<Measure>] type s
y luego un número entero con una medida
let t = 1<s>
y luego convertirlo en un flotador
let r = float t
vemos esor = 1.0
sin un tipo de medida. Esto parece muy extraño, ya que se ha perdido toda la información de la medida.
Puedes usarLanguagePrimitives.FloatWithMeasure
para volver a convertir en un flotador con algo como
let inline floatMeasure (arg:int<'t>) : (float<'t>) =
LanguagePrimitives.FloatWithMeasure (float arg)
que aplica los tipos correctos, pero esta no parece la solución correcta, ya que los documentos para unidades de medida (http://msdn.microsoft.com/en-us/library/dd233243.aspx) dicen
Sin embargo, para escribir capas de interoperabilidad, también hay algunas funciones explícitas que puede usar para convertir valores sin unidades en valores con unidades. Estos se encuentran en el módulo Microsoft.FSharp.Core.LanguagePrimitives. Por ejemplo, para convertir de un flotador sin unidad a un flotador, use FloatWithMeasure, como se muestra en el siguiente código.
Lo que parece sugerir que la función debe evitarse en el código F #.
¿Hay alguna forma más idiomática de hacer esto?