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



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow