F#が次のようにhttp://msdn.microsoft.com/en-us/library/dd233243.aspxで説明し、測定能力の単位を有する:F#単位のハスケル相当物はありますか?
[<Measure>] type unit-name [ = measure ]
これは単位は、として定義されることを可能にする:
として書き込まれるtype [<Measure>] USD
type [<Measure>] EUR
とコード:
let dollars = 25.0<USD>
let euros = 25.0<EUR>
// Results in an error as the units differ
if dollars > euros then printfn "Greater!"
また、コンバージョンも処理されます(これは、Measureにはいくつかの機能があります対策は)、掛け分けて指数化させ、その罰金:
// Mass, grams.
[<Measure>] type g
// Mass, kilograms.
[<Measure>] type kg
let gramsPerKilogram: float<g kg^-1> = 1000.0<g/kg>
let convertGramsToKilograms (x: float<g>) = x/gramsPerKilogram
私の本能が、Haskellでは同様の機能を実装することが可能なはずである私に言うが、私は実行する方法のいずれかの例を見つけることができていませんでしたそれ。
編集:ああ私の言葉は、ワームの巨大な缶です!研究論文はhttp://research.microsoft.com/en-us/um/people/akenn/units/CEFP09TypesForUnitsOfMeasure.pdfです。私はそれがすべてのものを実装するコードの数行以上のものだと思っています。夏のプロジェクトの誰ですか? :)
ことを正規化機能
norm
。長さ、質量などについても同じことができます。 – DiegoNolan[dimension](http://hackage.haskell.org/package/dimensional)をご覧ください。 Hackageのマニュアルは存在しませんが、[wiki上で]いくつかの例があります(https://code.google.com/p/dimensional/w/list?q=label:Example)。 – hammar
'dimension'は実際の物理的なユニットのための良い提案ですが、お金のためのものではありません。 – leftaroundabout