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