How do F# units of measure work?

According to a response on the next related blog post, they are a purely static mechanism in the F# compiler. So there is no CLR representation of the units data.

Its not entirely clear whether it currently works with non-float types, but from the perspective of the type system it is theoretically possible.


The best (and I think official) place to find out about this is on Andrew Kennedy's blog.

Here are the (current) relevant posts.

  • Units of Measure in F#: Part One, Introducing Units
  • Units of Measure in F#: Part Two, Unit Conversions
  • Units of Measure in F#: Part Three, Generic Units
  • Units of Measure in F#: Part Four, Parameterized Types

As I said in the post that your answerer referred to, this is most definitely something that you CAN'T do in C# (though I wish you could).