Haskell Language
Fantoomtypen
Zoeken…
Gebruikscasus voor fantoomtypen: valuta's
Fantoomtypen zijn handig voor het omgaan met gegevens, die identieke representaties hebben maar niet logisch van hetzelfde type zijn.
Een goed voorbeeld is het omgaan met valuta's. Als u met valuta's werkt, wilt u absoluut nooit twee hoeveelheden verschillende valuta's toevoegen. Wat zou de resultaatvaluta van 5.32€ + 2.94$
zijn? Het is niet gedefinieerd en er is geen goede reden om dit te doen.
Een oplossing hiervoor kan er ongeveer zo uitzien:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
data USD
data EUR
newtype Amount a = Amount Double
deriving (Show, Eq, Ord, Num)
Met de extensie GeneralisedNewtypeDeriving
kunnen we Num
afleiden voor het type Amount
. GHC hergebruikt de Num
instantie van Double
.
Als u nu Euro-bedragen vertegenwoordigt met bijvoorbeeld (5.0 :: Amount EUR)
hebt u het probleem opgelost om dubbele bedragen gescheiden te houden op type niveau zonder overhead te introduceren. Dingen zoals (1.13 :: Amount EUR) + (5.30 :: Amount USD)
zullen resulteren in een typefout en vereisen dat u op de juiste manier omgaat met valutaconversie.
Meer uitgebreide documentatie is te vinden in het haskell wiki-artikel