Haskell Language
Fantomtyper
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