Suche…


Anwendungsfall für Phantomtypen: Währungen

Phantomtypen sind nützlich für den Umgang mit Daten, die identische Darstellungen haben, aber nicht logisch vom selben Typ sind.

Ein gutes Beispiel ist der Umgang mit Währungen. Wenn Sie mit Währungen arbeiten, möchten Sie auf keinen Fall zwei Beträge verschiedener Währungen hinzufügen. Was wäre die Ergebniswährung von 5.32€ + 2.94$ ? Es ist nicht definiert und es gibt keinen guten Grund, dies zu tun.

Eine Lösung dazu könnte ungefähr so ​​aussehen:

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

data USD
data EUR

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

Mit der Erweiterung GeneralisedNewtypeDeriving können wir Num für den Amount ableiten. GHC verwendet die Num Instanz von Double .

Wenn Sie nun Eurobeträge mit (5.0 :: Amount EUR) , haben Sie das Problem gelöst, doppelte Beträge auf der Typenebene getrennt zu halten, ohne Overhead zu verursachen. Sachen wie (1.13 :: Amount EUR) + (5.30 :: Amount USD) führen zu einem Typfehler und erfordern, dass Sie die Währungsumrechnung entsprechend behandeln.

Eine umfassendere Dokumentation finden Sie im Wiki-Artikel zu haskell



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow