An interesting (and seemingly very useful feature) of F#: units-of-measure types, which help the compiler reason about correctness.
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure
> [<Measure>] type cm;;
[<Measure>]
type cm
> [<Measure>] type mile;;
[<Measure>]
type mile
> [<Measure>] type hour;;
[<Measure>]
type hour
> let distance = 20.0<mile>;;
val distance : float<mile> = 20.0
> let duration = 12.0<hour>;;
val duration : float<hour> = 12.0
> let speed = distance / duration;;
val speed : float<mile/hour> = 1.666666667
> speed + 2<cm>;;
Stopped due to error
System.Exception: Operation could not be completed due to earlier error
The type 'int<cm>' does not match the type 'float<mile/hour>' at 3,8
The type 'int<cm>' does not match the type 'float<mile/hour>' at 3,6
> speed + 1.0<mile/hour>;;
val it : float<mile/hour> = 2.666666667