{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Hcompta.Format.Ledger.Unit where import Control.DeepSeq import Data.Data import Data.Eq (Eq(..)) import Data.Ord (Ord(..)) import Data.String (IsString) import Data.Text (Text) import qualified Data.Text as Text import Data.Typeable () import Prelude ((.), Int) import Text.Show (Show(..)) import qualified Hcompta.Unit as Unit -- * Type 'Unit' newtype Unit = Unit Text deriving (Data, Eq, IsString, Ord, Show, Typeable) instance Unit.Unit Unit where unit_empty = Unit "" unit_text (Unit t) = t instance NFData Unit where rnf (Unit t) = rnf t unit_length :: Unit -> Int unit_length = Text.length . Unit.unit_text -- * Example 'Unit's -- | 'Unit.unit_empty'. scalar :: Unit scalar = Unit.unit_empty -- | unit of currency. chf :: Unit chf = Unit "CHF" -- | unit of currency. cny :: Unit cny = Unit "Ұ" -- | unit of currency. eur :: Unit eur = Unit "€" -- | unit of currency. gbp :: Unit gbp = Unit "£" -- | unit of currency. inr :: Unit inr = Unit "₹" -- | unit of currency. jpy :: Unit jpy = Unit "¥" -- | unit of currency. -- -- NOTE: Ꝑ (U+A750) is used as a replacement latin letter, -- because GHC currently chokes on ₽ (U+20BD), -- which is the recently (2014/02) assigned Unicode code-point -- for this currency. rub :: Unit rub = Unit "Ꝑ" -- | unit of currency. usd :: Unit usd = Unit "$"