Learned something new today. It turns out in current incarnation of F# you can have “parametrized types”. Although it sounds like another flavor of templates, it is nothing like it. These are the types with “units of measure” attached. You can have weight value of type float
The measures exist only for F# compiler. They are “erased” when creating the IL code, so they can’t be queried at runtime. I am not sure yet how generic this can be made and what other applications besides physics it might have.