数値に測定単位を付与する
単位は Microsoft.FSharp.Data.UnitSystems.UI で定義されている
open Microsoft.FSharp.Data.UnitSystems.UI.UnitSymbols
code:fsharp
let fiveKilos = 5.0<kg>
let fiveMeters = 5.0<m>
これにより、コンパイラは測定単位が一致しない場合はエラーを吐く
code:fsharp
fiveKilos = fiveMeters
// error FS0001: 型が一致しません。
// 'float<kg>' という指定が必要ですが、 'float<m>' が指定されました。
// 測定単位 'kg' は測定単位 'm' と一致しません
コンパイラが使用するだけなので、ランタイムのオーバーヘッドは無い
ドメイン で測定単位を用いると、以下のように書ける。 code:fsharp
type KilogramQuantity = KilogramQuantity of float<kg>
測定単位は物理的な単位以外でも使用できる
e.g.
タイムアウト時間の最小単位(秒とミリ秒が混ざらないように)
空間的な次元(x 軸と y 軸が混ざらないように)
通貨