Haskell Language
Tipi di fantasmi
Ricerca…
Usa caso per i tipi di fantasma: valute
I tipi di fantasma sono utili per gestire i dati, che hanno rappresentazioni identiche ma non sono logicamente dello stesso tipo.
Un buon esempio riguarda le valute. Se lavori con le valute non vuoi assolutamente ad esempio aggiungere due quantità di valute diverse. Quale sarebbe la valuta del risultato di 5.32€ + 2.94$
? Non è definito e non ci sono buoni motivi per farlo.
Una soluzione a questo potrebbe assomigliare a questo:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
data USD
data EUR
newtype Amount a = Amount Double
deriving (Show, Eq, Ord, Num)
L'estensione GeneralisedNewtypeDeriving
ci consente di derivare Num
per il tipo Amount
. GHC riutilizza l'istanza Num
Double
.
Ora se rappresenti importi in Euro con ad esempio (5.0 :: Amount EUR)
hai risolto il problema di mantenere le doppie quantità separate a livello di tipo senza introdurre un sovraccarico. Cose come (1.13 :: Amount EUR) + (5.30 :: Amount USD)
provocheranno un errore di tipo e richiederanno di trattare la conversione della valuta in modo appropriato.
Una documentazione più completa può essere trovata nell'articolo di haskell wiki