Haskell Language
팬텀 유형
수색…
팬텀 유형의 유스 케이스 : 통화
팬텀 유형은 동일한 표현을 갖고 있지만 논리적으로는 같은 유형의 데이터를 다루는 데 유용합니다.
좋은 예가 통화를 다루는 것입니다. 통화로 작업하는 경우 절대 두 가지 금액의 통화를 추가하지 않아도됩니다. 5.32€ + 2.94$
의 결과 통화는 무엇입니까? 정의되지 않았으며이를 수행 할 정당한 이유가 없습니다.
이것에 대한 해결책은 다음과 같습니다.
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
data USD
data EUR
newtype Amount a = Amount Double
deriving (Show, Eq, Ord, Num)
GeneralisedNewtypeDeriving
확장을 사용하면 Amount
유형에 Num
을 파생시킬 수 있습니다. GHC는 Double
의 Num
인스턴스를 다시 사용합니다.
이제 예를 들어 (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