Haskell Language
Types fantômes
Recherche…
Cas d'utilisation pour les types fantômes: devises
Les types fantômes sont utiles pour traiter des données, qui ont des représentations identiques mais qui ne sont pas logiquement du même type.
Un bon exemple concerne les devises. Si vous travaillez avec des devises, vous ne devez absolument jamais ajouter deux quantités de devises différentes. Quelle serait la devise de résultat de 5.32€ + 2.94$
? Ce n'est pas défini et il n'y a aucune raison de le faire.
Une solution pourrait ressembler à ceci:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
data USD
data EUR
newtype Amount a = Amount Double
deriving (Show, Eq, Ord, Num)
L'extension GeneralisedNewtypeDeriving
nous permet de dériver Num
pour le type Amount
. GHC réutilise l'instance Double
's Num
.
Maintenant, si vous représentez des montants en euros avec par exemple (5.0 :: Amount EUR)
vous avez résolu le problème de la séparation des montants doubles au niveau du type sans introduire de frais généraux. Stuff comme (1.13 :: Amount EUR) + (5.30 :: Amount USD)
entraînera une erreur de type et vous obligera à gérer la conversion de devise de manière appropriée.
Une documentation plus complète peut être trouvée dans l' article wiki de haskell