수색…


팬텀 유형의 유스 케이스 : 통화

팬텀 유형은 동일한 표현을 갖고 있지만 논리적으로는 같은 유형의 데이터를 다루는 데 유용합니다.

좋은 예가 통화를 다루는 것입니다. 통화로 작업하는 경우 절대 두 가지 금액의 통화를 추가하지 않아도됩니다. 5.32€ + 2.94$ 의 결과 통화는 무엇입니까? 정의되지 않았으며이를 수행 할 정당한 이유가 없습니다.

이것에 대한 해결책은 다음과 같습니다.

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

data USD
data EUR

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

GeneralisedNewtypeDeriving 확장을 사용하면 Amount 유형에 Num 을 파생시킬 수 있습니다. GHC는 DoubleNum 인스턴스를 다시 사용합니다.

이제 예를 들어 (5.0 :: Amount EUR) 유로 금액을 나타낼 경우 오버 헤드를 발생시키지 않고 유형 금액에서 이중 금액을 분리하는 문제를 해결했습니다. (1.13 :: Amount EUR) + (5.30 :: Amount USD) 와 같은 유형 오류가 발생하고 통화 변환을 적절히 처리해야합니다.

보다 포괄적 인 문서는 haskell 위키 문서 에서 찾을 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow