F # имеет единицы измерения, описанные в http://msdn.microsoft.com/en-us/library/dd233243.aspx следующим образом:
[<Measure>] type unit-name [ = measure ]
Это позволяет определять единицы измерения, такие как:
type [<Measure>] USD
type [<Measure>] EUR
И код, который будет записан как:
let dollars = 25.0<USD>
let euros = 25.0<EUR>
// Results in an error as the units differ
if dollars > euros then printfn "Greater!"
Он также обрабатывает конверсии (я предполагаю, что означает, что "Мера" имеет определенные функции, которые позволяют умножать, делить и экспонировать Меры):
// Mass, grams.
[<Measure>] type g
// Mass, kilograms.
[<Measure>] type kg
let gramsPerKilogram: float<g kg^-1> = 1000.0<g/kg>
let convertGramsToKilograms (x: float<g>) = x / gramsPerKilogram
Мои инстинкты говорят мне, что в Haskell возможно реализовать аналогичную возможность, но я не смог найти примеров того, как это сделать.
Изменить: о, мое слово, это огромная баня червей! Там есть исследовательский документ http://research.microsoft.com/en-us/um/people/akenn/units/CEFP09TypesForUnitsOfMeasure.pdf. Я предполагаю, что это более чем несколько строк кода для реализации всего. Летний проект?:)