F # Единицы измерения - значения "подъема" для плавания <something>

При импорте чисел из файла csv мне нужно преобразовать их в float с единицей.

В настоящее время я делаю это со встроенной функцией:

data |> List.map float |> List.map (fun n -> n * 1.0<m>)

Но мне интересно, есть ли более элегантный способ сделать это - или мне нужно создать свой собственный модуль с функциями преобразования?

Что было бы действительно хорошо, было бы что-то вроде этого, но я сомневаюсь, что это возможно...

data |> List.map float |> List.map lift<m>

Это противоположность моему предыдущему вопросу (Как полностью удалить единицы измерения F #).

ОБНОВЛЕНИЕ: для домашних устройств я пробовал это, что работает нормально:

[<Measure>]
type km = 
    static member lift (v:float) = v * 1.0<km>

data |> List.map float |> List.map km.lift

или, после вопроса в этом ответе

data |> List.map (float >> km.lift)

Ответ 1

Похоже, что единицы измерения не могут быть параметрами типа на данный момент (не знаю, изменится ли это). Поэтому самый короткий способ написать это:

data |> List.map float |> List.map ((*) 1.0<m>)

ИЗМЕНИТЬ

См. также FloatWithMeasure здесь

http://msdn.microsoft.com/en-us/library/ee806527(VS.100).aspx

Ответ 2

Есть ли причина, по которой вам приходится дважды сопоставлять карту? Что не так с этим:

data |> List.map (fun x -> (float x) * 1.0<m>)