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



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow