Sök…


Använd fall för fantomtyper: valutor

Fantomtyper är användbara för att hantera data, som har identiska framställningar men inte logiskt av samma typ.

Ett bra exempel är att hantera valutor. Om du arbetar med valutor vill du absolut inte lägga till två belopp med olika valutor. Vad skulle resultatet valuta på 5.32€ + 2.94$ vara? Det är inte definierat och det finns ingen god anledning att göra detta.

En lösning på detta kan se ut så här:

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

data USD
data EUR

newtype Amount a = Amount Double
                 deriving (Show, Eq, Ord, Num)

GeneralisedNewtypeDeriving tillägget gör att vi kan hämta Num för typen Amount . GHC återanvänder Double 's Num instans.

Om du representerar Euro-belopp med t.ex. (5.0 :: Amount EUR) du löst problemet med att hålla dubbla belopp åtskilda på typnivå utan att införa omkostnader. Saker som (1.13 :: Amount EUR) + (5.30 :: Amount USD) kommer att resultera i ett typfel och kräver att du hanterar valutakonvertering på rätt sätt.

Mer omfattande dokumentation finns i haskell wiki-artikeln



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow