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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow