Szukaj…


Przypadek użycia dla typów fantomowych: Waluty

Typy fantomów są przydatne w przypadku danych, które mają identyczne reprezentacje, ale nie są logicznie tego samego typu.

Dobrym przykładem jest obsługa walut. Jeśli pracujesz z walutami, absolutnie nigdy nie chcesz np. Dodawać dwóch kwot różnych walut. Jaka byłaby waluta wyniku 5.32€ + 2.94$ ? Nie jest zdefiniowane i nie ma dobrego powodu, aby to zrobić.

Rozwiązanie tego mogłoby wyglądać mniej więcej tak:

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

data USD
data EUR

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

Rozszerzenie GeneralisedNewtypeDeriving pozwala nam wyprowadzić Num dla typu Amount . GHC ponownie wykorzystuje Double „s Num instancji.

Teraz, jeśli reprezentujesz kwoty w euro np. (5.0 :: Amount EUR) , rozwiązałeś problem utrzymywania podwójnych kwot osobno na poziomie rodzaju bez wprowadzania narzutu. Rzeczy takie jak (1.13 :: Amount EUR) + (5.30 :: Amount USD) spowodują błąd typu i wymagają odpowiedniego postępowania z przeliczaniem walut.

Bardziej wyczerpującą dokumentację można znaleźć w artykule wiki Haskell



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow