Haskell Language
Типы фантомов
Поиск…
Вариант использования для фантомных типов: Валюта
Типы фантомов полезны для работы с данными, которые имеют идентичные представления, но не являются логически одного и того же типа.
Хорошим примером является валюта. Если вы работаете с валютами, вы абсолютно не хотите, например, добавлять две суммы разных валют. Какова будет валюта результата 5.32€ + 2.94$ ? Это не определено, и для этого нет веских оснований.
Решение этого может выглядеть примерно так:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
data USD
data EUR
newtype Amount a = Amount Double
deriving (Show, Eq, Ord, Num)
Расширение GeneralisedNewtypeDeriving позволяет нам выводить Num для типа Amount . GHC повторно использует экземпляр Double 's Num .
Теперь, если вы представляете суммы в евро, например, (5.0 :: Amount EUR) вы решили проблему сохранения двойных сумм на уровне типа без введения накладных расходов. Такие вещи, как (1.13 :: Amount EUR) + (5.30 :: Amount USD) , приведут к ошибке типа и потребуют надлежащего обращения с конверсией валюты.
Более полную документацию можно найти в статье wiki haskell