So, F# has units of measure built in. They’re pretty cool.
Essentially, you can declare units of measure, like this:
[<Measure>] type kg [<Measure>] type m [<Measure>] type s
Once you’ve done that, you can then associate these units of measure with numeric types.
let distance = 5.0<m> let time = 30<s> let weight = 50<kg>
You can combine measures, either with new values, or by multiplying or dividing already existing identifiers with units.
let speed = distance / (float time); let force = 5.0<kg m/s^2>
Finally, you can declare units of measure based on existing units of measure.
[<Measure>] type N = kg m/s^2 let forceNewton = 5.0<N> let equal = forceNewton = force
From that, we’ll get the output:
val equal : bool = true
If the numbers are different, the bool is false, and if the types are wrong, it fails with a type mismatch.
So, that’s a quick demonstration of Units of Measure in F#. They’re fantastic.