-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Currencies representation, pretty printing and conversion
--   
--   ISO 4217 Currencies representation, pretty printing and conversion:
--   
--   <ul>
--   <li>Represent monetary amounts of a particular currency in a type-safe
--   manner</li>
--   <li>Convert amounts between different currencies</li>
--   <li>Print human readable amounts</li>
--   </ul>
@package currencies
@version 0.2.0.0


-- | ISO 4217 compliant and other currencies
module Data.Currency.Currencies
class (Show c, Eq c) => Currency c
currencyType :: Currency c => c -> CurrencyType

-- | ISO 4217 Currency Code
isoCode :: Currency c => c -> String

-- | ISO 4217 Currency Numeric Code
isoNumericCode :: Currency c => c -> String

-- | Number of digits after the decimal separator
decimalDigits :: Currency c => c -> Int

-- | Currency UTF-8 symbol
symbol :: Currency c => c -> String

-- | Exchange rate with US Dollar (USD)
exchangeUSD :: Currency c => c -> Double

-- | ISO 3166-1 alpha-2 Country codes where the currency is used
countries :: Currency c => c -> [String]
data CurrencyType

-- | Currencies recognized as legal tender
Circulating :: CurrencyType

-- | Currencies with validity only in particular geographical localities
Local :: CurrencyType

-- | Currencies for procedural purposes and precious metals (X currencies)
Supranational :: CurrencyType

-- | Digital, cryptography based currencies
Cryptocurrency :: CurrencyType

-- | Currencies used in games, movies, novels, and other fictional setups
Fictional :: CurrencyType

-- | Brazilian Real
data BRL
BRL :: BRL

-- | Bitcoin
data BTC
BTC :: BTC

-- | Canadian Dollar
data CAD
CAD :: CAD

-- | Chilean Peso
data CLP
CLP :: CLP

-- | European Union Euro
data EUR
EUR :: EUR

-- | Japanse Yen
data JPY
JPY :: JPY

-- | North Korean Won
data KPW
KPW :: KPW

-- | North Korean Won
data KRW
KRW :: KRW

-- | Mexican Peso
data MXN
MXN :: MXN

-- | Panamanian Balboa
data PAB
PAB :: PAB

-- | Peruvian Sol
data PEN
PEN :: PEN

-- | Paraguayan guaraní
data PYG
PYG :: PYG

-- | SIM's Simoleon
data SIM
SIM :: SIM

-- | US Dollar
data USD
USD :: USD
instance GHC.Classes.Eq Data.Currency.Currencies.USD
instance GHC.Read.Read Data.Currency.Currencies.USD
instance GHC.Show.Show Data.Currency.Currencies.USD
instance GHC.Classes.Eq Data.Currency.Currencies.SIM
instance GHC.Read.Read Data.Currency.Currencies.SIM
instance GHC.Show.Show Data.Currency.Currencies.SIM
instance GHC.Classes.Eq Data.Currency.Currencies.PYG
instance GHC.Read.Read Data.Currency.Currencies.PYG
instance GHC.Show.Show Data.Currency.Currencies.PYG
instance GHC.Classes.Eq Data.Currency.Currencies.PEN
instance GHC.Read.Read Data.Currency.Currencies.PEN
instance GHC.Show.Show Data.Currency.Currencies.PEN
instance GHC.Classes.Eq Data.Currency.Currencies.PAB
instance GHC.Read.Read Data.Currency.Currencies.PAB
instance GHC.Show.Show Data.Currency.Currencies.PAB
instance GHC.Classes.Eq Data.Currency.Currencies.MXN
instance GHC.Read.Read Data.Currency.Currencies.MXN
instance GHC.Show.Show Data.Currency.Currencies.MXN
instance GHC.Classes.Eq Data.Currency.Currencies.KRW
instance GHC.Read.Read Data.Currency.Currencies.KRW
instance GHC.Show.Show Data.Currency.Currencies.KRW
instance GHC.Classes.Eq Data.Currency.Currencies.KPW
instance GHC.Read.Read Data.Currency.Currencies.KPW
instance GHC.Show.Show Data.Currency.Currencies.KPW
instance GHC.Classes.Eq Data.Currency.Currencies.JPY
instance GHC.Read.Read Data.Currency.Currencies.JPY
instance GHC.Show.Show Data.Currency.Currencies.JPY
instance GHC.Classes.Eq Data.Currency.Currencies.EUR
instance GHC.Read.Read Data.Currency.Currencies.EUR
instance GHC.Show.Show Data.Currency.Currencies.EUR
instance GHC.Classes.Eq Data.Currency.Currencies.CLP
instance GHC.Read.Read Data.Currency.Currencies.CLP
instance GHC.Show.Show Data.Currency.Currencies.CLP
instance GHC.Classes.Eq Data.Currency.Currencies.CAD
instance GHC.Read.Read Data.Currency.Currencies.CAD
instance GHC.Show.Show Data.Currency.Currencies.CAD
instance GHC.Classes.Eq Data.Currency.Currencies.BTC
instance GHC.Read.Read Data.Currency.Currencies.BTC
instance GHC.Show.Show Data.Currency.Currencies.BTC
instance GHC.Classes.Eq Data.Currency.Currencies.BRL
instance GHC.Read.Read Data.Currency.Currencies.BRL
instance GHC.Show.Show Data.Currency.Currencies.BRL
instance GHC.Classes.Eq Data.Currency.Currencies.CurrencyType
instance GHC.Read.Read Data.Currency.Currencies.CurrencyType
instance GHC.Show.Show Data.Currency.Currencies.CurrencyType
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.USD
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.SIM
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.PYG
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.PEN
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.PAB
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.MXN
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.KRW
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.KPW
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.JPY
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.EUR
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.CLP
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.CAD
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.BTC
instance Data.Currency.Currencies.Currency Data.Currency.Currencies.BRL


-- | Operations upon monetary <a>Amount</a>s
--   
--   Converting amounts
--   
--   <pre>
--   &gt;&gt;&gt; convert USD (Amount EUR 23482.34)
--   Amount USD 27709.1612
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; prettyPrint $ convert USD (Amount EUR 23482.34)
--   "USD 27,709.16"
--   </pre>
--   
--   Comparing amounts
--   
--   <pre>
--   &gt;&gt;&gt; compareAmounts  (Amount EUR 1000) (Amount BTC 1)
--   LT
--   </pre>
module Data.Currency.Amounts

-- | Monetary amounts
data Amount c
Amount :: c -> Double -> Amount c

-- | Convert an <a>Amount</a> of an arbitrary currency to <a>USD</a>
toUSD :: (Currency c) => Amount c -> Amount USD

-- | Convert an <a>Amount</a> from <a>USD</a> to a given <a>Currency</a>
fromUSD :: (Currency c) => c -> Amount USD -> Amount c

-- | Convert an <a>Amount</a> to a given <a>Currency</a>
convert :: (Currency c', Currency c) => c' -> Amount c -> Amount c'

-- | Compare two <a>Amount</a>s of arbitrary currencies
compareAmounts :: (Currency c1, Currency c2) => Amount c1 -> Amount c2 -> Ordering
instance GHC.Classes.Eq c => GHC.Classes.Eq (Data.Currency.Amounts.Amount c)
instance GHC.Read.Read c => GHC.Read.Read (Data.Currency.Amounts.Amount c)
instance GHC.Show.Show c => GHC.Show.Show (Data.Currency.Amounts.Amount c)
instance Data.Currency.Currencies.Currency c => GHC.Classes.Ord (Data.Currency.Amounts.Amount c)


-- | Pretty print monetary amounts like:
--   
--   <ul>
--   <li><i>$ 34.50</i></li>
--   <li><i>USD 3,456.29</i></li>
--   <li><i>€ 32 433 938.23</i></li>
--   </ul>
--   
--   Using default printing settings
--   
--   <pre>
--   &gt;&gt;&gt; prettyPrint (Amount USD 2342.2)
--   "USD 2,342.20"
--   
--   &gt;&gt;&gt; prettyPrint (Amount EUR 45827.346)
--   "EUR 45,827.35"
--   </pre>
--   
--   Using custom printing settings
--   
--   <pre>
--   &gt;&gt;&gt; prettyPrintWith (defaultConfig { useCurrencySymbol = True }) (Amount USD 2342.2)
--   "$ 2,342.20"
--   
--   &gt;&gt;&gt; prettyPrintWith (defaultConfig { useCurrencySymbol = True }) (Amount EUR 2342.2)
--   "€ 2,342.20"
--   
--   &gt;&gt;&gt; prettyPrintWith (defaultConfig { showDecimals = False }) (Amount USD 25.50)
--   "USD 25"
--   </pre>
--   
--   For more printing settings see <a>PrettyConfig</a>
module Data.Currency.Pretty

-- | Pretty print a monetary amount using <a>defaultConfig</a>
prettyPrint :: (Currency c) => Amount c -> String

-- | Pretty print a monetary amount with a custom <a>PrettyConfig</a>
--   configuration
prettyPrintWith :: (Currency c) => PrettyConfig -> Amount c -> String
data PrettyConfig
PrettyConfig :: Bool -> Bool -> Bool -> Bool -> Char -> Char -> PrettyConfig
[showDecimals] :: PrettyConfig -> Bool

-- | Print four digits amounts as <i>USD 1000,00</i> instead of <i>USD
--   1,000.00</i>
[compactFourDigitAmounts] :: PrettyConfig -> Bool

-- | Replace the currency ISO code with its symbol to produce <i>$
--   23.50</i> instead of <i>USD 23.50</i>
[useCurrencySymbol] :: PrettyConfig -> Bool

-- | Use the currency ISO code as suffix to produce <i>23.50 USD</i>
--   instead of <i>USD 23.50</i>
[suffixIsoCode] :: PrettyConfig -> Bool
[largeAmountSeparator] :: PrettyConfig -> Char
[decimalSeparator] :: PrettyConfig -> Char

-- | Default <a>PrettyConfig</a> used in <a>prettyPrint</a>
--   
--   <ul>
--   <li>Show decimals</li>
--   <li>Compact four digit amounts</li>
--   <li>Use ISO code</li>
--   <li>Separate large amounts with comma</li>
--   <li>Separate decimals with dot</li>
--   </ul>
defaultConfig :: PrettyConfig
instance GHC.Show.Show Data.Currency.Pretty.PrettyConfig
