Haskell Language
ファントムタイプ
サーチ…
ファントムタイプのユースケース:通貨
ファントム型は、同じ表現を持ちますが、論理的に同じ型ではないデータを扱う場合に便利です。
良い例は、通貨を扱うことです。通貨で作業する場合は絶対に絶対に決して2つの金額の異なる通貨を追加することは望ましくありません。 5.32€ + 2.94$
の結果通貨はどうなりますか?それは定義されておらず、これを行う正当な理由はありません。
これに対する解決策は次のようになります。
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
data USD
data EUR
newtype Amount a = Amount Double
deriving (Show, Eq, Ord, Num)
GeneralisedNewtypeDeriving
拡張では、 Amount
型のNum
を派生させることができます。 GHCはDouble
のNum
インスタンスを再利用します。
例えば、 (5.0 :: Amount EUR)
ユーロの金額を表す場合、オーバーヘッドを導入することなく、タイプ・レベルで二重金額を分離するという問題を解決しました。 (1.13 :: Amount EUR) + (5.30 :: Amount USD)
ようなものは、タイプエラーとなり、適切に通貨変換を処理する必要があります。
より包括的なドキュメントは、 haskell wikiの記事で見つけることができます
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow