safe-money-0.7.1: Type-safe and lossless encoding and manipulation of money, fiat currencies, crypto currencies and precious metals.

Safe HaskellNone
LanguageHaskell2010

Money

Contents

Description

Import this module qualified as follows:

import qualified Money

Note: This module exports support for many well-known currencies out-of-the-box, but you are not limited to the currencies mentioned here. You can simply create a new Scale instance, and voilà. If you want to add a new currency to the out-of-the-box offer, please request so in https://github.com/k0001/safe-money/issues and the authors will see to it.

This module offers plenty of documentation, but for a deep explanation of how all of the pieces fit together, please read https://ren.zone/articles/safe-money. Notice, however, that this library has changed a bit since that article was written. You can always see the change log to understand what has changed.

Also, keep in mind that useful instances for the many types defined by safe-money can be found in these other libraries:

Synopsis

Dense monetary values

data Dense (currency :: Symbol) Source #

Dense represents a dense monetary value for currency (usually a ISO-4217 currency code, but not necessarily) as a rational number.

While monetary values associated with a particular currency are discrete (e.g., an exact number of coins and bills), you can still treat monetary values as dense while operating on them. For example, the half of USD 3.41 is USD 1.705, which is not an amount that can't be represented as a number of USD cents (the smallest unit that can represent USD amounts). Nevertheless, if you do manage to represent USD 1.709 somehow, and you eventually multiply USD 1.705 by 4 for example, then you end up with USD 6.82, which is again a value representable as USD cents. In other words, Dense monetary values allow us to perform precise calculations deferring the conversion to a Discrete monetary values as much as posible. Once you are ready to approximate a Dense value to a Discrete value you can use one discreteFromDense. Otherwise, using toRational you can obtain a precise Rational representation.

Instances
Eq (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

(==) :: Dense currency -> Dense currency -> Bool #

(/=) :: Dense currency -> Dense currency -> Bool #

ErrFractionalDense => Fractional (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

(/) :: Dense currency -> Dense currency -> Dense currency #

recip :: Dense currency -> Dense currency #

fromRational :: Rational -> Dense currency #

Num (Dense currency) Source #

Notice that multiplication of Dense values doesn't make sense:

(*) :: Dense currency -> Dense currency -> Dense currency

How is * implemented, then? It behaves as the scalar multiplication of a Dense amount by a Rational scalar. That is, you can think of * as having one of the the following types:

(*) :: Rational -> Dense currency -> Dense currency
(*) :: Dense currency -> Rational -> Dense currency@

That is:

dense' (1 % 4) * dense' (1 % 2)  ==  dense' (1 % 8)

In fact, * functions exactly as *^ from the VectorSpace instance.

(*)  ==  (*^)
(*)  ==  flip (*^)
Instance details

Defined in Money.Internal

Methods

(+) :: Dense currency -> Dense currency -> Dense currency #

(-) :: Dense currency -> Dense currency -> Dense currency #

(*) :: Dense currency -> Dense currency -> Dense currency #

negate :: Dense currency -> Dense currency #

abs :: Dense currency -> Dense currency #

signum :: Dense currency -> Dense currency #

fromInteger :: Integer -> Dense currency #

Ord (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

compare :: Dense currency -> Dense currency -> Ordering #

(<) :: Dense currency -> Dense currency -> Bool #

(<=) :: Dense currency -> Dense currency -> Bool #

(>) :: Dense currency -> Dense currency -> Bool #

(>=) :: Dense currency -> Dense currency -> Bool #

max :: Dense currency -> Dense currency -> Dense currency #

min :: Dense currency -> Dense currency -> Dense currency #

KnownSymbol currency => Read (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

readsPrec :: Int -> ReadS (Dense currency) #

readList :: ReadS [Dense currency] #

readPrec :: ReadPrec (Dense currency) #

readListPrec :: ReadPrec [Dense currency] #

Real (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

toRational :: Dense currency -> Rational #

KnownSymbol currency => Show (Dense currency) Source #
> show (dense' (1 % 3) :: Dense "USD")
"Dense \"USD\" 1%3"
Instance details

Defined in Money.Internal

Methods

showsPrec :: Int -> Dense currency -> ShowS #

show :: Dense currency -> String #

showList :: [Dense currency] -> ShowS #

Generic (Dense currency) Source # 
Instance details

Defined in Money.Internal

Associated Types

type Rep (Dense currency) :: Type -> Type #

Methods

from :: Dense currency -> Rep (Dense currency) x #

to :: Rep (Dense currency) x -> Dense currency #

Arbitrary (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

arbitrary :: Gen (Dense currency) #

shrink :: Dense currency -> [Dense currency] #

KnownSymbol currency => Binary (Dense currency) Source #

Compatible with SomeDense.

Instance details

Defined in Money.Internal

Methods

put :: Dense currency -> Put #

get :: Get (Dense currency) #

putList :: [Dense currency] -> Put #

NFData (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

rnf :: Dense currency -> () #

Hashable (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

hashWithSalt :: Int -> Dense currency -> Int #

hash :: Dense currency -> Int #

VectorSpace (Dense currency) Source #

WARNING a scalar with a zero denominator will cause *^ to crash.

Instance details

Defined in Money.Internal

Associated Types

type Scalar (Dense currency) :: Type #

Methods

(*^) :: Scalar (Dense currency) -> Dense currency -> Dense currency #

AdditiveGroup (Dense currency) Source # 
Instance details

Defined in Money.Internal

Methods

zeroV :: Dense currency #

(^+^) :: Dense currency -> Dense currency -> Dense currency #

negateV :: Dense currency -> Dense currency #

(^-^) :: Dense currency -> Dense currency -> Dense currency #

type Rep (Dense currency) Source # 
Instance details

Defined in Money.Internal

type Rep (Dense currency) = D1 (MetaData "Dense" "Money.Internal" "safe-money-0.7.1-1BcrJESs2d66OOiE9qkUxB" True) (C1 (MetaCons "Dense" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Rational)))
type Scalar (Dense currency) Source # 
Instance details

Defined in Money.Internal

type Scalar (Dense currency) = Rational

denseCurrency :: KnownSymbol currency => Dense currency -> Text Source #

Dense currency identifier.

> denseCurrency (dense' 4 :: Dense "USD")
"USD"

dense :: Rational -> Maybe (Dense currency) Source #

Build a Dense monetary value from a Rational value.

For example, if you want to represent USD 12.52316, then you can use:

dense (125316 % 10000)

Notice that dense returns Nothing in case the given Rational's denominator is zero, which although unlikely, it is possible if the Rational was unsafely constructed. When dealing with hardcoded or trusted Rational values, you can use dense' instead of dense which unsafely constructs a Dense.

dense' :: Rational -> Dense currency Source #

Unsafely build a Dense monetary value from a Rational value. Contrary to dense, this function *crashes* if the given Rational has zero as a denominator, which is something very unlikely to happen unless the given Rational was itself unsafely constructed. Other than that, dense and dense' behave the same.

Prefer to use dense when dealing with Rational inputs from untrusted sources.

denominator x /= 0
  ⇒ dense x == Just (dense' x)
denominator x == 0
  ⇒ undefined == dense' x

denseFromDiscrete Source #

Arguments

:: GoodScale scale 
=> Discrete' currency scale 
-> Dense currency 

Convert currency Discrete monetary value into a Dense monetary value.

denseFromDecimal Source #

Arguments

:: Maybe Char

Thousands separator for the integer part, if any (i.e., the ',' in -1,234.56789).

-> Char

Decimal separator (i.e., the '.' in -1,234.56789)

-> Rational

Scale used by the rendered decimal. It is important to get this number correctly, otherwise the resulting Dense amount will be wrong. Please refer to the documentation for denseToDecimal to understand the meaning of this scale.

In summary, this scale will have a value of 1 unless the decimal amount represents a unit other than the main unit for the currency (e.g., cents rather than dollars for USD, or grams rather than troy-ounces for XAU, or millibitcoins rather than bitcoins for BTC).

-> Text

The raw string containing the decimal representation (e.g., "-1,234.56789").

-> Maybe (Dense currency) 

Parses a decimal representation of a Dense.

Leading '-' and '+' characters are considered.

denseToDecimal Source #

Arguments

:: Approximation

Approximation to use if necesary in order to fit the Dense amount in as many decimal numbers as requested.

-> Bool

Whether to render a leading '+' sign in case the amount is positive.

-> Maybe Char

Thousands separator for the integer part, if any (i.e., the ',' in 1,234.56789).

If the given separator is a digit, or if it is equal to the decimal separator, then this functions returns Nothing.

-> Char

Decimal separator (i.e., the '.' in 1,234.56789).

If the given separator is a digit, or if it is equal to the thousands separator, then this functions returns Nothing.

-> Word8

Number of decimal numbers to render, if any.

-> Rational

Scale used to when rendering the decimal number. This is useful if you want to render a “number of cents” rather than a “number of dollars” when rendering a USD amount, for example.

Set this to 1 % 1 if you don't care.

For example, when rendering render dense' (123 % 100) :: Dense USD as a decimal number with three decimal places, a scale of 1 % 1 (analogous to Scale "USD" "dollar") would render 1 as the integer part and 230 as the fractional part, whereas a scale of 100 % 1 (analogous Scale "USD" "cent") would render 123 as the integer part and 000 as the fractional part.

You can easily obtain the scale for a particular currency and unit combination using the scale function. Otherwise, you are free to pass in any other positive Rational number. If a non-positive scale is given, then this function returns Nothing.

Specifying scales other than 1 % 1 is particularly useful for currencies whose main unit is too big. For example, the main unit of gold (XAU) is the troy-ounce, which is too big for day to day accounting, so using the gram or the grain as the unit when rendering decimal amounts could be useful.

Be careful when using a scale smaller than 1 % 1, since it may become impossible to parse back a meaningful amount from the rendered decimal representation unless a big number of fractional digits is used.

-> Dense currency

The dense monetary amount to render.

-> Maybe Text

Returns Nothing is the given separators are not acceptable (i.e., they are digits, or they are equal).

Render a Dense monetary amount as a decimal number in a potentially lossy manner.

> denseToDecimal Round True (Just ',') '.' 2 (1 % 1)
     (dense' (123456 % 100) :: Dense "USD")
Just "+1,234.56"
> denseToDecimal Round True (Just ',') '.' 2 (100 % 1)
     (dense' (123456 % 100) :: Dense "USD")
Just "+123,456.00"

This function returns Nothing if the scale is less than 1, or if it's not possible to reliably render the decimal string due to a bad choice of separators. That is, if the separators are digits or equal among themselves, this function returns Nothing.

Discrete monetary values

type Discrete (currency :: Symbol) (unit :: Symbol) = Discrete' currency (Scale currency unit) Source #

Discrete represents a discrete monetary value for a currency expresed as an integer amount of a particular unit. For example, with currency ~ "USD" and unit ~ "cent" you can represent United States Dollars to their full extent.

currency is usually a ISO-4217 currency code, but not necessarily.

Construct Discrete values using discrete, fromIntegral, fromInteger, discreteFromDense, discreteFromDecimal.

For example, if you want to represent GBP 21.05, where the smallest represetable unit for a GBP (United Kingdom Pound) is the penny, and 100 pennies equal 1 GBP (i.e., Scale "GBP" ~ '(100, 1)), then you can use:

discrete 2105 :: Discrete "GBP" "penny"

Because 2015 / 100 == 20.15.

data Discrete' (currency :: Symbol) (scale :: (Nat, Nat)) Source #

Discrete' represents a discrete monetary value for a currency expresed as amount of scale, which is a rational number expressed as (numerator, denominator).

You'll be using Discrete instead of Discrete' most of the time, which mentions the unit name (such as cent or centavo) instead of explicitely mentioning the unit scale.

Instances
GoodScale scale => Enum (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

succ :: Discrete' currency scale -> Discrete' currency scale #

pred :: Discrete' currency scale -> Discrete' currency scale #

toEnum :: Int -> Discrete' currency scale #

fromEnum :: Discrete' currency scale -> Int #

enumFrom :: Discrete' currency scale -> [Discrete' currency scale] #

enumFromThen :: Discrete' currency scale -> Discrete' currency scale -> [Discrete' currency scale] #

enumFromTo :: Discrete' currency scale -> Discrete' currency scale -> [Discrete' currency scale] #

enumFromThenTo :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale -> [Discrete' currency scale] #

GoodScale scale => Eq (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

(==) :: Discrete' currency scale -> Discrete' currency scale -> Bool #

(/=) :: Discrete' currency scale -> Discrete' currency scale -> Bool #

(ErrFractionalDiscrete, GoodScale scale) => Fractional (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

(/) :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

recip :: Discrete' currency scale -> Discrete' currency scale #

fromRational :: Rational -> Discrete' currency scale #

GoodScale scale => Integral (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

quot :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

rem :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

div :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

mod :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

quotRem :: Discrete' currency scale -> Discrete' currency scale -> (Discrete' currency scale, Discrete' currency scale) #

divMod :: Discrete' currency scale -> Discrete' currency scale -> (Discrete' currency scale, Discrete' currency scale) #

toInteger :: Discrete' currency scale -> Integer #

GoodScale scale => Num (Discrete' currency scale) Source #

Notice that multiplication of Discrete' values doesn't make sense:

(*) :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale

How is * implemented, then? It behaves as the scalar multiplication of a Discrete' amount by an Integer scalar. That is, you can think of * as having one of the the following types:

(*) :: Integer -> Discrete' currency scale -> Discrete' currency scale
(*) :: Discrete' currency scale -> Integer -> Discrete' currency scale@

That is:

discrete 2 * discrete 4  ==  discrete 8

In fact, * functions exactly as *^ from the VectorSpace instance.

(*)  ==  (*^)
(*)  ==  flip (*^)
Instance details

Defined in Money.Internal

Methods

(+) :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

(-) :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

(*) :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

negate :: Discrete' currency scale -> Discrete' currency scale #

abs :: Discrete' currency scale -> Discrete' currency scale #

signum :: Discrete' currency scale -> Discrete' currency scale #

fromInteger :: Integer -> Discrete' currency scale #

GoodScale scale => Ord (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

compare :: Discrete' currency scale -> Discrete' currency scale -> Ordering #

(<) :: Discrete' currency scale -> Discrete' currency scale -> Bool #

(<=) :: Discrete' currency scale -> Discrete' currency scale -> Bool #

(>) :: Discrete' currency scale -> Discrete' currency scale -> Bool #

(>=) :: Discrete' currency scale -> Discrete' currency scale -> Bool #

max :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

min :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

(KnownSymbol currency, GoodScale scale) => Read (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

readsPrec :: Int -> ReadS (Discrete' currency scale) #

readList :: ReadS [Discrete' currency scale] #

readPrec :: ReadPrec (Discrete' currency scale) #

readListPrec :: ReadPrec [Discrete' currency scale] #

GoodScale scale => Real (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

toRational :: Discrete' currency scale -> Rational #

(KnownSymbol currency, GoodScale scale) => Show (Discrete' currency scale) Source #
> show (discrete 123 :: Discrete "USD" "cent")
"Discrete \"USD\" 100%1 123"
Instance details

Defined in Money.Internal

Methods

showsPrec :: Int -> Discrete' currency scale -> ShowS #

show :: Discrete' currency scale -> String #

showList :: [Discrete' currency scale] -> ShowS #

GoodScale scale => Generic (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Associated Types

type Rep (Discrete' currency scale) :: Type -> Type #

Methods

from :: Discrete' currency scale -> Rep (Discrete' currency scale) x #

to :: Rep (Discrete' currency scale) x -> Discrete' currency scale #

GoodScale scale => Arbitrary (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

arbitrary :: Gen (Discrete' currency scale) #

shrink :: Discrete' currency scale -> [Discrete' currency scale] #

(KnownSymbol currency, GoodScale scale) => Binary (Discrete' currency scale) Source #

Compatible with SomeDiscrete.

Instance details

Defined in Money.Internal

Methods

put :: Discrete' currency scale -> Put #

get :: Get (Discrete' currency scale) #

putList :: [Discrete' currency scale] -> Put #

GoodScale scale => NFData (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

rnf :: Discrete' currency scale -> () #

GoodScale scale => Hashable (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

hashWithSalt :: Int -> Discrete' currency scale -> Int #

hash :: Discrete' currency scale -> Int #

GoodScale scale => VectorSpace (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Associated Types

type Scalar (Discrete' currency scale) :: Type #

Methods

(*^) :: Scalar (Discrete' currency scale) -> Discrete' currency scale -> Discrete' currency scale #

GoodScale scale => AdditiveGroup (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

Methods

zeroV :: Discrete' currency scale #

(^+^) :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

negateV :: Discrete' currency scale -> Discrete' currency scale #

(^-^) :: Discrete' currency scale -> Discrete' currency scale -> Discrete' currency scale #

type Rep (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

type Rep (Discrete' currency scale) = D1 (MetaData "Discrete'" "Money.Internal" "safe-money-0.7.1-1BcrJESs2d66OOiE9qkUxB" True) (C1 (MetaCons "Discrete" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Integer)))
type Scalar (Discrete' currency scale) Source # 
Instance details

Defined in Money.Internal

type Scalar (Discrete' currency scale) = Integer

discrete :: GoodScale scale => Integer -> Discrete' currency scale Source #

Construct a Discrete value.

discreteCurrency Source #

Arguments

:: (KnownSymbol currency, GoodScale scale) 
=> Discrete' currency scale 
-> Text 

Discrete currency identifier.

> discreteCurrency (discrete 4 :: Discrete "USD" "cent")
"USD"

discreteFromDense Source #

Arguments

:: GoodScale scale 
=> Approximation

Approximation to use if necesary in order to fit the Dense amount in the requested scale.

-> Dense currency 
-> (Discrete' currency scale, Dense currency) 

Approximate a Dense value x to the nearest value fully representable a given scale.

If the given Dense doesn't fit entirely in the scale, then a non-zero Dense reminder is returned alongside the Discrete approximation.

Proof that discreteFromDense doesn't lose money:

x == case discreteFromDense a x of
        (y, z) -> denseFromDiscrete y + z

discreteFromDecimal Source #

Arguments

:: GoodScale scale 
=> Maybe Char

Thousands separator for the integer part, if any (i.e., the ',' in -1,234.56789).

-> Char

Decimal separator (i.e., the '.' in -1,234.56789)

-> Rational

Scale used by the rendered decimal. It is important to get this number correctly, otherwise the resulting Dense amount will be wrong. Please refer to the documentation for denseToDecimal to understand the meaning of this scale.

In summary, this scale will have a value of 1 unless the decimal amount represents a unit other than the main unit for the currency (e.g., cents rather than dollars for USD, or grams rather than troy-ounces for XAU, or millibitcoins rather than bitcoins for BTC).

-> Text

The raw string containing the decimal representation (e.g., "-1,234.56789").

-> Maybe (Discrete' currency scale) 

Parses a decimal representation of a Discrete.

Leading '-' and '+' characters are considered.

Notice that parsing will fail unless the entire precision of the decimal number can be represented in the desired scale.

discreteToDecimal Source #

Arguments

:: GoodScale scale 
=> Approximation

Approximation to use if necesary in order to fit the Discrete amount in as many decimal numbers as requested.

-> Bool

Whether to render a leading '+' sign in case the amount is positive.

-> Maybe Char

Thousands separator for the integer part, if any (i.e., the ',' in 1,234.56789).

If the given separator is a digit, or if it is equal to the decimal separator, then this functions returns Nothing.

-> Char

Decimal separator (i.e., the '.' in 1,234.56789).

If the given separator is a digit, or if it is equal to the thousands separator, then this functions returns Nothing.

-> Word8

Number of decimal numbers to render, if any.

-> Rational

Scale used to when rendering the decimal number. This is useful if you want to render a “number of cents” rather than a “number of dollars” when rendering a USD amount, for example.

Set this to 1 % 1 if you don't care.

For example, when rendering render discrete 123 :: Dense "USD" "cent" as a decimal number with three decimal places, a scale of 1 % 1 (analogous to Scale "USD" "dollar") would render 1 as the integer part and 230 as the fractional part, whereas a scale of 100 % 1 (analogous Scale "USD" "cent") would render 123 as the integer part and 000 as the fractional part.

You can easily obtain the scale for a particular currency and unit combination using the scale function. Otherwise, you are free to pass in any other positive Rational number. If a non-positive scale is given, then this function returns Nothing.

Specifying scales other than 1 % 1 is particularly useful for currencies whose main unit is too big. For example, the main unit of gold (XAU) is the troy-ounce, which is too big for day to day accounting, so using the gram or the grain as the unit when rendering decimal amounts could be useful.

Be careful when using a scale smaller than 1 % 1, since it may become impossible to parse back a meaningful amount from the rendered decimal representation unless a big number of fractional digits is used.

-> Discrete' currency scale

The monetary amount to render.

-> Maybe Text

Returns Nothing is the given separators are not acceptable (i.e., they are digits, or they are equal).

Render a Discrete' monetary amount as a decimal number in a potentially lossy manner.

This is simply a convenient wrapper around denseToDecimal:

discreteToDecimal a b c d e f (dis :: Discrete' currency scale)
    == denseToDecimal a b c d e f (denseFromDiscrete dis :: Dense currency)

In particular, the scale in Discrete' currency scale has no influence over the scale in which the decimal number is rendered. Use the Rational parameter to this function for modifying that behavior.

Please refer to denseToDecimal for further documentation.

This function returns Nothing if the scale is less than 1, or if it's not possible to reliably render the decimal string due to a bad choice of separators. That is, if the separators are digits or equal among themselves, this function returns Nothing.

Currency scales

type family Scale (currency :: Symbol) (unit :: Symbol) :: (Nat, Nat) Source #

Scale currency unit is an rational number (expressed as '(numerator, denominator)) indicating how many pieces of unit fit in currency.

currency is usually a ISO-4217 currency code, but not necessarily.

The Scale will determine how to convert a Dense value into a Discrete value and vice-versa.

For example, there are 100 USD cents in 1 USD, so the scale for this relationship is:

type instance Scale "USD" "cent" = '(100, 1)

As another example, there is 1 dollar in USD, so the scale for this relationship is:

type instance Scale "USD" "dollar" = '(1, 1)

When using Discrete values to represent money, it will be impossible to represent an amount of currency smaller than unit. So, if you decide to use Scale "USD" "dollar" as your scale, you will not be able to represent values such as USD 3.50 or USD 21.87 becacuse they are not exact multiples of a dollar.

If there exists a canonical smallest unit that can fully represent the currency in all its denominations, then an instance Scale currency currency exists.

type instance Scale "USD" "USD" = Scale "USD" "cent"

For some monetary values, such as precious metals, there is no smallest representable unit, since you can repeatedly split the precious metal many times before it stops being a precious metal. Nevertheless, for practical purposes we can make a sane arbitrary choice of smallest unit. For example, the base unit for XAU (Gold) is the troy ounce, which is too big to be considered the smallest unit, but we can arbitrarily choose the milligrain as our smallest unit, which is about as heavy as a single grain of table salt and should be sufficiently precise for all monetary practical purposes. A troy ounce equals 480000 milligrains.

type instance Scale "XAU" "milligrain" = '(480000, 1)

You can use other units such as milligrams for measuring XAU, for example. However, since the amount of milligrams in a troy ounce (31103.477) is not integral, we need to use rational with a denominator different than 1 to express it.

type instance Scale "XAU" "milligram" = '(31103477, 1000)

If you try to obtain the Scale of a currency without an obvious smallest representable unit, like XAU, you will get a compile error.

Instances
type Scale "ADA" "ADA" Source #

Ada

Instance details

Defined in Money

type Scale "ADA" "ADA" = (,) 1000000 1
type Scale "ADA" "ada" Source # 
Instance details

Defined in Money

type Scale "ADA" "ada" = (,) 1 1
type Scale "ADA" "lovelace" Source # 
Instance details

Defined in Money

type Scale "ADA" "lovelace" = (,) 1000000 1
type Scale "AED" "AED" Source #

United Arab Emirates dirham

Instance details

Defined in Money

type Scale "AED" "AED" = (,) 100 1
type Scale "AED" "dirham" Source # 
Instance details

Defined in Money

type Scale "AED" "dirham" = (,) 1 1
type Scale "AED" "fils" Source # 
Instance details

Defined in Money

type Scale "AED" "fils" = (,) 100 1
type Scale "AFN" "AFN" Source #

Afghan afghani

Instance details

Defined in Money

type Scale "AFN" "AFN" = (,) 100 1
type Scale "AFN" "afghani" Source # 
Instance details

Defined in Money

type Scale "AFN" "afghani" = (,) 1 1
type Scale "AFN" "pul" Source # 
Instance details

Defined in Money

type Scale "AFN" "pul" = (,) 100 1
type Scale "ALL" "ALL" Source #

Albanian lek

Instance details

Defined in Money

type Scale "ALL" "ALL" = (,) 100 1
type Scale "ALL" "lek" Source # 
Instance details

Defined in Money

type Scale "ALL" "lek" = (,) 1 1
type Scale "ALL" "qindarke" Source # 
Instance details

Defined in Money

type Scale "ALL" "qindarke" = (,) 100 1
type Scale "AMD" "AMD" Source #

Armenian dram

Instance details

Defined in Money

type Scale "AMD" "AMD" = (,) 100 1
type Scale "AMD" "dram" Source # 
Instance details

Defined in Money

type Scale "AMD" "dram" = (,) 1 1
type Scale "AMD" "luma" Source # 
Instance details

Defined in Money

type Scale "AMD" "luma" = (,) 100 1
type Scale "ANG" "ANG" Source #

Netherlands Antillean guilder

Instance details

Defined in Money

type Scale "ANG" "ANG" = (,) 100 1
type Scale "ANG" "cent" Source # 
Instance details

Defined in Money

type Scale "ANG" "cent" = (,) 100 1
type Scale "ANG" "guilder" Source # 
Instance details

Defined in Money

type Scale "ANG" "guilder" = (,) 1 1
type Scale "AOA" "AOA" Source #

Angolan kwanza

Instance details

Defined in Money

type Scale "AOA" "AOA" = (,) 100 1
type Scale "AOA" "centimo" Source # 
Instance details

Defined in Money

type Scale "AOA" "centimo" = (,) 100 1
type Scale "AOA" "kwanza" Source # 
Instance details

Defined in Money

type Scale "AOA" "kwanza" = (,) 1 1
type Scale "ARS" "ARS" Source #

Argentine peso

Instance details

Defined in Money

type Scale "ARS" "ARS" = (,) 100 1
type Scale "ARS" "centavo" Source # 
Instance details

Defined in Money

type Scale "ARS" "centavo" = (,) 100 1
type Scale "ARS" "peso" Source # 
Instance details

Defined in Money

type Scale "ARS" "peso" = (,) 1 1
type Scale "AUD" "AUD" Source #

Australian dollar

Instance details

Defined in Money

type Scale "AUD" "AUD" = (,) 100 1
type Scale "AUD" "cent" Source # 
Instance details

Defined in Money

type Scale "AUD" "cent" = (,) 100 1
type Scale "AUD" "dollar" Source # 
Instance details

Defined in Money

type Scale "AUD" "dollar" = (,) 1 1
type Scale "AWG" "AWG" Source #

Aruban florin

Instance details

Defined in Money

type Scale "AWG" "AWG" = (,) 100 1
type Scale "AWG" "cent" Source # 
Instance details

Defined in Money

type Scale "AWG" "cent" = (,) 100 1
type Scale "AWG" "florin" Source # 
Instance details

Defined in Money

type Scale "AWG" "florin" = (,) 1 1
type Scale "AZN" "AZN" Source #

Azerbaijani manat

Instance details

Defined in Money

type Scale "AZN" "AZN" = (,) 100 1
type Scale "AZN" "manat" Source # 
Instance details

Defined in Money

type Scale "AZN" "manat" = (,) 1 1
type Scale "AZN" "qapik" Source # 
Instance details

Defined in Money

type Scale "AZN" "qapik" = (,) 100 1
type Scale "BAM" "BAM" Source #

Bosnia and Herzegovina convertible mark

Instance details

Defined in Money

type Scale "BAM" "BAM" = (,) 100 1
type Scale "BAM" "fening" Source # 
Instance details

Defined in Money

type Scale "BAM" "fening" = (,) 100 1
type Scale "BAM" "mark" Source # 
Instance details

Defined in Money

type Scale "BAM" "mark" = (,) 1 1
type Scale "BBD" "BBD" Source #

Barbadian dollar

Instance details

Defined in Money

type Scale "BBD" "BBD" = (,) 100 1
type Scale "BBD" "cent" Source # 
Instance details

Defined in Money

type Scale "BBD" "cent" = (,) 100 1
type Scale "BBD" "dollar" Source # 
Instance details

Defined in Money

type Scale "BBD" "dollar" = (,) 1 1
type Scale "BDT" "BDT" Source #

Bangladeshi taka

Instance details

Defined in Money

type Scale "BDT" "BDT" = (,) 100 1
type Scale "BDT" "paisa" Source # 
Instance details

Defined in Money

type Scale "BDT" "paisa" = (,) 100 1
type Scale "BDT" "taka" Source # 
Instance details

Defined in Money

type Scale "BDT" "taka" = (,) 1 1
type Scale "BGN" "BGN" Source #

Bulgarian lev

Instance details

Defined in Money

type Scale "BGN" "BGN" = (,) 100 1
type Scale "BGN" "lev" Source # 
Instance details

Defined in Money

type Scale "BGN" "lev" = (,) 1 1
type Scale "BGN" "stotinka" Source # 
Instance details

Defined in Money

type Scale "BGN" "stotinka" = (,) 100 1
type Scale "BHD" "BHD" Source #

Bahraini dinar

Instance details

Defined in Money

type Scale "BHD" "BHD" = (,) 1000 1
type Scale "BHD" "dinar" Source # 
Instance details

Defined in Money

type Scale "BHD" "dinar" = (,) 1 1
type Scale "BHD" "fils" Source # 
Instance details

Defined in Money

type Scale "BHD" "fils" = (,) 1000 1
type Scale "BIF" "BIF" Source #

Burundi franc

Instance details

Defined in Money

type Scale "BIF" "BIF" = (,) 100 1
type Scale "BIF" "centime" Source # 
Instance details

Defined in Money

type Scale "BIF" "centime" = (,) 100 1
type Scale "BIF" "franc" Source # 
Instance details

Defined in Money

type Scale "BIF" "franc" = (,) 1 1
type Scale "BMD" "BMD" Source #

Bermudian dollar

Instance details

Defined in Money

type Scale "BMD" "BMD" = (,) 100 1
type Scale "BMD" "cent" Source # 
Instance details

Defined in Money

type Scale "BMD" "cent" = (,) 100 1
type Scale "BMD" "dollar" Source # 
Instance details

Defined in Money

type Scale "BMD" "dollar" = (,) 1 1
type Scale "BND" "BND" Source #

Brunei dollar

Instance details

Defined in Money

type Scale "BND" "BND" = (,) 100 1
type Scale "BND" "dollar" Source # 
Instance details

Defined in Money

type Scale "BND" "dollar" = (,) 1 1
type Scale "BND" "sen" Source # 
Instance details

Defined in Money

type Scale "BND" "sen" = (,) 100 1
type Scale "BOB" "BOB" Source #

Bolivian boliviano

Instance details

Defined in Money

type Scale "BOB" "BOB" = (,) 100 1
type Scale "BOB" "boliviano" Source # 
Instance details

Defined in Money

type Scale "BOB" "boliviano" = (,) 1 1
type Scale "BOB" "centavo" Source # 
Instance details

Defined in Money

type Scale "BOB" "centavo" = (,) 100 1
type Scale "BOV" "BOV" Source #

Bolivian Mvdol

Instance details

Defined in Money

type Scale "BOV" "BOV" = (,) 100 1
type Scale "BRL" "BRL" Source #

Brazilian real

Instance details

Defined in Money

type Scale "BRL" "BRL" = (,) 100 1
type Scale "BRL" "centavo" Source # 
Instance details

Defined in Money

type Scale "BRL" "centavo" = (,) 100 1
type Scale "BRL" "real" Source # 
Instance details

Defined in Money

type Scale "BRL" "real" = (,) 1 1
type Scale "BSD" "BSD" Source #

Bahamian dollar

Instance details

Defined in Money

type Scale "BSD" "BSD" = (,) 100 1
type Scale "BSD" "cent" Source # 
Instance details

Defined in Money

type Scale "BSD" "cent" = (,) 1 1
type Scale "BSD" "dollar" Source # 
Instance details

Defined in Money

type Scale "BSD" "dollar" = (,) 1 1
type Scale "BTC" "BTC" Source #

Bitcoin

Instance details

Defined in Money

type Scale "BTC" "BTC" = (,) 100000000 1
type Scale "BTC" "bitcoin" Source # 
Instance details

Defined in Money

type Scale "BTC" "bitcoin" = (,) 1 1
type Scale "BTC" "millibitcoin" Source # 
Instance details

Defined in Money

type Scale "BTC" "millibitcoin" = (,) 1000 1
type Scale "BTC" "satoshi" Source # 
Instance details

Defined in Money

type Scale "BTC" "satoshi" = (,) 100000000 1
type Scale "BTN" "BTN" Source #

Bhutanese ngultrum

Instance details

Defined in Money

type Scale "BTN" "BTN" = (,) 100 1
type Scale "BTN" "chetrum" Source # 
Instance details

Defined in Money

type Scale "BTN" "chetrum" = (,) 100 1
type Scale "BTN" "ngultrum" Source # 
Instance details

Defined in Money

type Scale "BTN" "ngultrum" = (,) 1 1
type Scale "BWP" "BWP" Source #

Botswana pula

Instance details

Defined in Money

type Scale "BWP" "BWP" = (,) 100 1
type Scale "BWP" "pula" Source # 
Instance details

Defined in Money

type Scale "BWP" "pula" = (,) 1 1
type Scale "BWP" "thebe" Source # 
Instance details

Defined in Money

type Scale "BWP" "thebe" = (,) 100 1
type Scale "BYN" "BYN" Source #

Belarusian ruble

Instance details

Defined in Money

type Scale "BYN" "BYN" = (,) 100 1
type Scale "BYR" "BYR" Source #

Belarusian ruble

Instance details

Defined in Money

type Scale "BYR" "BYR" = (,) 100 1
type Scale "BYR" "kapyeyka" Source # 
Instance details

Defined in Money

type Scale "BYR" "kapyeyka" = (,) 100 1
type Scale "BYR" "ruble" Source # 
Instance details

Defined in Money

type Scale "BYR" "ruble" = (,) 1 1
type Scale "BZD" "BZD" Source #

Belize dollar

Instance details

Defined in Money

type Scale "BZD" "BZD" = (,) 100 1
type Scale "BZD" "cent" Source # 
Instance details

Defined in Money

type Scale "BZD" "cent" = (,) 100 1
type Scale "BZD" "dollar" Source # 
Instance details

Defined in Money

type Scale "BZD" "dollar" = (,) 1 1
type Scale "CAD" "CAD" Source #

Canadian dollar

Instance details

Defined in Money

type Scale "CAD" "CAD" = (,) 100 1
type Scale "CAD" "cent" Source # 
Instance details

Defined in Money

type Scale "CAD" "cent" = (,) 100 1
type Scale "CAD" "dollar" Source # 
Instance details

Defined in Money

type Scale "CAD" "dollar" = (,) 1 1
type Scale "CDF" "CDF" Source #

Congolese franc

Instance details

Defined in Money

type Scale "CDF" "CDF" = (,) 100 1
type Scale "CDF" "centime" Source # 
Instance details

Defined in Money

type Scale "CDF" "centime" = (,) 100 1
type Scale "CDF" "franc" Source # 
Instance details

Defined in Money

type Scale "CDF" "franc" = (,) 1 1
type Scale "CHE" "CHE" Source #

WIR euro

Instance details

Defined in Money

type Scale "CHE" "CHE" = (,) 100 1
type Scale "CHF" "CHF" Source #

Swiss franc

Instance details

Defined in Money

type Scale "CHF" "CHF" = (,) 100 1
type Scale "CHF" "franc" Source # 
Instance details

Defined in Money

type Scale "CHF" "franc" = (,) 1 1
type Scale "CHF" "rappen" Source # 
Instance details

Defined in Money

type Scale "CHF" "rappen" = (,) 100 1
type Scale "CHW" "CHW" Source #

WIR franc

Instance details

Defined in Money

type Scale "CHW" "CHW" = (,) 100 1
type Scale "CLF" "CLF" Source #

Chilean unidad de fomento

Instance details

Defined in Money

type Scale "CLF" "CLF" = (,) 100 1
type Scale "CLP" "CLP" Source #

Chilean peso

Instance details

Defined in Money

type Scale "CLP" "CLP" = (,) 100 1
type Scale "CLP" "centavo" Source # 
Instance details

Defined in Money

type Scale "CLP" "centavo" = (,) 100 1
type Scale "CLP" "peso" Source # 
Instance details

Defined in Money

type Scale "CLP" "peso" = (,) 1 1
type Scale "CNY" "CNY" Source #

Chinese Renminbi

Instance details

Defined in Money

type Scale "CNY" "CNY" = (,) 100 1
type Scale "CNY" "fen" Source # 
Instance details

Defined in Money

type Scale "CNY" "fen" = (,) 100 1
type Scale "CNY" "yuan" Source # 
Instance details

Defined in Money

type Scale "CNY" "yuan" = (,) 1 1
type Scale "COP" "COP" Source #

Colombian peso

Instance details

Defined in Money

type Scale "COP" "COP" = (,) 100 1
type Scale "COP" "centavo" Source # 
Instance details

Defined in Money

type Scale "COP" "centavo" = (,) 100 1
type Scale "COP" "peso" Source # 
Instance details

Defined in Money

type Scale "COP" "peso" = (,) 1 1
type Scale "COU" "COU" Source #

Colombian unidad de valor real

Instance details

Defined in Money

type Scale "COU" "COU" = (,) 100 1
type Scale "CRC" "CRC" Source #

Costa Rican colon

Instance details

Defined in Money

type Scale "CRC" "CRC" = (,) 100 1
type Scale "CRC" "centimo" Source # 
Instance details

Defined in Money

type Scale "CRC" "centimo" = (,) 100 1
type Scale "CRC" "colon" Source # 
Instance details

Defined in Money

type Scale "CRC" "colon" = (,) 1 1
type Scale "CUC" "CUC" Source #

Cuban peso convertible

Instance details

Defined in Money

type Scale "CUC" "CUC" = (,) 100 1
type Scale "CUC" "centavo" Source # 
Instance details

Defined in Money

type Scale "CUC" "centavo" = (,) 100 1
type Scale "CUC" "peso" Source # 
Instance details

Defined in Money

type Scale "CUC" "peso" = (,) 1 1
type Scale "CUP" "CUP" Source #

Cuban peso

Instance details

Defined in Money

type Scale "CUP" "CUP" = (,) 100 1
type Scale "CUP" "centavo" Source # 
Instance details

Defined in Money

type Scale "CUP" "centavo" = (,) 100 1
type Scale "CUP" "peso" Source # 
Instance details

Defined in Money

type Scale "CUP" "peso" = (,) 1 1
type Scale "CVE" "CVE" Source #

Cape Verdean escudo

Instance details

Defined in Money

type Scale "CVE" "CVE" = (,) 100 1
type Scale "CVE" "centavo" Source # 
Instance details

Defined in Money

type Scale "CVE" "centavo" = (,) 100 1
type Scale "CVE" "escudo" Source # 
Instance details

Defined in Money

type Scale "CVE" "escudo" = (,) 1 1
type Scale "CZK" "CZK" Source #

Czech koruna

Instance details

Defined in Money

type Scale "CZK" "CZK" = (,) 100 1
type Scale "CZK" "haler" Source # 
Instance details

Defined in Money

type Scale "CZK" "haler" = (,) 100 1
type Scale "CZK" "koruna" Source # 
Instance details

Defined in Money

type Scale "CZK" "koruna" = (,) 1 1
type Scale "DJF" "DJF" Source #

Djiboutian franc

Instance details

Defined in Money

type Scale "DJF" "DJF" = (,) 100 1
type Scale "DJF" "centime" Source # 
Instance details

Defined in Money

type Scale "DJF" "centime" = (,) 100 1
type Scale "DJF" "franc" Source # 
Instance details

Defined in Money

type Scale "DJF" "franc" = (,) 1 1
type Scale "DKK" "DKK" Source #

Danish krone

Instance details

Defined in Money

type Scale "DKK" "DKK" = (,) 100 1
type Scale "DKK" "krone" Source # 
Instance details

Defined in Money

type Scale "DKK" "krone" = (,) 1 1
type Scale "DKK" "ore" Source # 
Instance details

Defined in Money

type Scale "DKK" "ore" = (,) 100 1
type Scale "DOP" "DOP" Source #

Dominican peso

Instance details

Defined in Money

type Scale "DOP" "DOP" = (,) 100 1
type Scale "DOP" "centavo" Source # 
Instance details

Defined in Money

type Scale "DOP" "centavo" = (,) 100 1
type Scale "DOP" "peso" Source # 
Instance details

Defined in Money

type Scale "DOP" "peso" = (,) 1 1
type Scale "DZD" "DZD" Source #

Algerian dinar

Instance details

Defined in Money

type Scale "DZD" "DZD" = (,) 100 1
type Scale "DZD" "dinar" Source # 
Instance details

Defined in Money

type Scale "DZD" "dinar" = (,) 1 1
type Scale "DZD" "santeem" Source # 
Instance details

Defined in Money

type Scale "DZD" "santeem" = (,) 100 1
type Scale "EGP" "EGP" Source #

Egyptian pound

Instance details

Defined in Money

type Scale "EGP" "EGP" = (,) 100 1
type Scale "EGP" "piastre" Source # 
Instance details

Defined in Money

type Scale "EGP" "piastre" = (,) 100 1
type Scale "EGP" "pound" Source # 
Instance details

Defined in Money

type Scale "EGP" "pound" = (,) 1 1
type Scale "ERN" "ERN" Source #

Eritrean nakfa

Instance details

Defined in Money

type Scale "ERN" "ERN" = (,) 100 1
type Scale "ERN" "cent" Source # 
Instance details

Defined in Money

type Scale "ERN" "cent" = (,) 100 1
type Scale "ERN" "nafka" Source # 
Instance details

Defined in Money

type Scale "ERN" "nafka" = (,) 1 1
type Scale "ETB" "ETB" Source #

Ethiopian birr

Instance details

Defined in Money

type Scale "ETB" "ETB" = (,) 100 1
type Scale "ETB" "birr" Source # 
Instance details

Defined in Money

type Scale "ETB" "birr" = (,) 1 1
type Scale "ETB" "santim" Source # 
Instance details

Defined in Money

type Scale "ETB" "santim" = (,) 100 1
type Scale "ETH" "ETH" Source #

Ether

Instance details

Defined in Money

type Scale "ETH" "ETH" = (,) 1000000000000000000 1
type Scale "ETH" "babbage" Source # 
Instance details

Defined in Money

type Scale "ETH" "babbage" = (,) 1000 1
type Scale "ETH" "ether" Source # 
Instance details

Defined in Money

type Scale "ETH" "ether" = (,) 1 1
type Scale "ETH" "finney" Source # 
Instance details

Defined in Money

type Scale "ETH" "finney" = (,) 1000000000000000 1
type Scale "ETH" "gwei" Source # 
Instance details

Defined in Money

type Scale "ETH" "gwei" = (,) 1000000000 1
type Scale "ETH" "kwei" Source # 
Instance details

Defined in Money

type Scale "ETH" "kwei" = (,) 1000 1
type Scale "ETH" "lovelace" Source # 
Instance details

Defined in Money

type Scale "ETH" "lovelace" = (,) 1000000 1
type Scale "ETH" "microether" Source # 
Instance details

Defined in Money

type Scale "ETH" "microether" = (,) 1000000000000 1
type Scale "ETH" "milliether" Source # 
Instance details

Defined in Money

type Scale "ETH" "milliether" = (,) 1000000000000000 1
type Scale "ETH" "mwei" Source # 
Instance details

Defined in Money

type Scale "ETH" "mwei" = (,) 1000000 1
type Scale "ETH" "shannon" Source # 
Instance details

Defined in Money

type Scale "ETH" "shannon" = (,) 1000000000 1
type Scale "ETH" "szabo" Source # 
Instance details

Defined in Money

type Scale "ETH" "szabo" = (,) 1000000000000 1
type Scale "ETH" "wei" Source # 
Instance details

Defined in Money

type Scale "ETH" "wei" = (,) 1000000000000000000 1
type Scale "EUR" "EUR" Source #

European euro

Instance details

Defined in Money

type Scale "EUR" "EUR" = (,) 100 1
type Scale "EUR" "cent" Source # 
Instance details

Defined in Money

type Scale "EUR" "cent" = (,) 100 1
type Scale "EUR" "euro" Source # 
Instance details

Defined in Money

type Scale "EUR" "euro" = (,) 1 1
type Scale "FJD" "FJD" Source #

Fijian dollar

Instance details

Defined in Money

type Scale "FJD" "FJD" = (,) 100 1
type Scale "FKP" "FKP" Source #

Falkland Islands pound

Instance details

Defined in Money

type Scale "FKP" "FKP" = (,) 100 1
type Scale "FKP" "penny" Source # 
Instance details

Defined in Money

type Scale "FKP" "penny" = (,) 100 1
type Scale "FKP" "pound" Source # 
Instance details

Defined in Money

type Scale "FKP" "pound" = (,) 1 1
type Scale "GBP" "GBP" Source #

Pound sterling

Instance details

Defined in Money

type Scale "GBP" "GBP" = (,) 100 1
type Scale "GBP" "penny" Source # 
Instance details

Defined in Money

type Scale "GBP" "penny" = (,) 100 1
type Scale "GBP" "pound" Source # 
Instance details

Defined in Money

type Scale "GBP" "pound" = (,) 1 1
type Scale "GEL" "GEL" Source #

Georgian lari

Instance details

Defined in Money

type Scale "GEL" "GEL" = (,) 100 1
type Scale "GEL" "lari" Source # 
Instance details

Defined in Money

type Scale "GEL" "lari" = (,) 1 1
type Scale "GEL" "tetri" Source # 
Instance details

Defined in Money

type Scale "GEL" "tetri" = (,) 100 1
type Scale "GHS" "GHS" Source #

Ghanaian cedi

Instance details

Defined in Money

type Scale "GHS" "GHS" = (,) 100 1
type Scale "GHS" "cedi" Source # 
Instance details

Defined in Money

type Scale "GHS" "cedi" = (,) 1 1
type Scale "GHS" "pesewa" Source # 
Instance details

Defined in Money

type Scale "GHS" "pesewa" = (,) 100 1
type Scale "GIP" "GIP" Source #

Gibraltar pound

Instance details

Defined in Money

type Scale "GIP" "GIP" = (,) 100 1
type Scale "GIP" "penny" Source # 
Instance details

Defined in Money

type Scale "GIP" "penny" = (,) 100 1
type Scale "GIP" "pound" Source # 
Instance details

Defined in Money

type Scale "GIP" "pound" = (,) 1 1
type Scale "GMD" "GMD" Source #

Gambian dalasi

Instance details

Defined in Money

type Scale "GMD" "GMD" = (,) 100 1
type Scale "GMD" "butut" Source # 
Instance details

Defined in Money

type Scale "GMD" "butut" = (,) 100 1
type Scale "GMD" "dalasi" Source # 
Instance details

Defined in Money

type Scale "GMD" "dalasi" = (,) 1 1
type Scale "GNF" "GNF" Source #

Guinean franc

Instance details

Defined in Money

type Scale "GNF" "GNF" = (,) 100 1
type Scale "GNF" "centime" Source # 
Instance details

Defined in Money

type Scale "GNF" "centime" = (,) 100 1
type Scale "GNF" "franc" Source # 
Instance details

Defined in Money

type Scale "GNF" "franc" = (,) 1 1
type Scale "GTQ" "GTQ" Source #

Guatemalan quetzal

Instance details

Defined in Money

type Scale "GTQ" "GTQ" = (,) 100 1
type Scale "GTQ" "centavo" Source # 
Instance details

Defined in Money

type Scale "GTQ" "centavo" = (,) 100 1
type Scale "GTQ" "quetzal" Source # 
Instance details

Defined in Money

type Scale "GTQ" "quetzal" = (,) 1 1
type Scale "GYD" "GYD" Source #

Guyanese dollar

Instance details

Defined in Money

type Scale "GYD" "GYD" = (,) 100 1
type Scale "GYD" "cent" Source # 
Instance details

Defined in Money

type Scale "GYD" "cent" = (,) 100 1
type Scale "GYD" "dollar" Source # 
Instance details

Defined in Money

type Scale "GYD" "dollar" = (,) 1 1
type Scale "HKD" "HKD" Source #

Hong Kong dollar

Instance details

Defined in Money

type Scale "HKD" "HKD" = (,) 100 1
type Scale "HKD" "cent" Source # 
Instance details

Defined in Money

type Scale "HKD" "cent" = (,) 100 1
type Scale "HKD" "dollar" Source # 
Instance details

Defined in Money

type Scale "HKD" "dollar" = (,) 1 1
type Scale "HNL" "HNL" Source #

Honduran lempira

Instance details

Defined in Money

type Scale "HNL" "HNL" = (,) 100 1
type Scale "HNL" "centavo" Source # 
Instance details

Defined in Money

type Scale "HNL" "centavo" = (,) 100 1
type Scale "HNL" "lempira" Source # 
Instance details

Defined in Money

type Scale "HNL" "lempira" = (,) 1 1
type Scale "HRK" "HRK" Source #

Croatian kuna

Instance details

Defined in Money

type Scale "HRK" "HRK" = (,) 100 1
type Scale "HRK" "kuna" Source # 
Instance details

Defined in Money

type Scale "HRK" "kuna" = (,) 1 1
type Scale "HRK" "lipa" Source # 
Instance details

Defined in Money

type Scale "HRK" "lipa" = (,) 100 1
type Scale "HTG" "HTG" Source #

Haitian gourde

Instance details

Defined in Money

type Scale "HTG" "HTG" = (,) 100 1
type Scale "HTG" "centime" Source # 
Instance details

Defined in Money

type Scale "HTG" "centime" = (,) 1 1
type Scale "HTG" "gourde" Source # 
Instance details

Defined in Money

type Scale "HTG" "gourde" = (,) 1 1
type Scale "HUF" "HUF" Source #

Hungarian forint

Instance details

Defined in Money

type Scale "HUF" "HUF" = (,) 100 1
type Scale "HUF" "filler" Source # 
Instance details

Defined in Money

type Scale "HUF" "filler" = (,) 100 1
type Scale "HUF" "forint" Source # 
Instance details

Defined in Money

type Scale "HUF" "forint" = (,) 1 1
type Scale "IDR" "IDR" Source #

Indonesian rupiah

Instance details

Defined in Money

type Scale "IDR" "IDR" = (,) 100 1
type Scale "IDR" "rupiah" Source # 
Instance details

Defined in Money

type Scale "IDR" "rupiah" = (,) 1 1
type Scale "IDR" "sen" Source # 
Instance details

Defined in Money

type Scale "IDR" "sen" = (,) 100 1
type Scale "ILS" "ILS" Source #

Israeli new shekel

Instance details

Defined in Money

type Scale "ILS" "ILS" = (,) 100 1
type Scale "ILS" "agora" Source # 
Instance details

Defined in Money

type Scale "ILS" "agora" = (,) 100 1
type Scale "ILS" "shekel" Source # 
Instance details

Defined in Money

type Scale "ILS" "shekel" = (,) 1 1
type Scale "INR" "INR" Source #

Indian rupee

Instance details

Defined in Money

type Scale "INR" "INR" = (,) 100 1
type Scale "INR" "paisa" Source # 
Instance details

Defined in Money

type Scale "INR" "paisa" = (,) 100 1
type Scale "INR" "rupee" Source # 
Instance details

Defined in Money

type Scale "INR" "rupee" = (,) 1 1
type Scale "IQD" "IQD" Source #

Iraqi dinar

Instance details

Defined in Money

type Scale "IQD" "IQD" = (,) 1000 1
type Scale "IQD" "dinar" Source # 
Instance details

Defined in Money

type Scale "IQD" "dinar" = (,) 1 1
type Scale "IQD" "fils" Source # 
Instance details

Defined in Money

type Scale "IQD" "fils" = (,) 1000 1
type Scale "IRR" "IRR" Source #

Iranian rial

Instance details

Defined in Money

type Scale "IRR" "IRR" = (,) 100 1
type Scale "IRR" "dinar" Source # 
Instance details

Defined in Money

type Scale "IRR" "dinar" = (,) 100 1
type Scale "IRR" "rial" Source # 
Instance details

Defined in Money

type Scale "IRR" "rial" = (,) 1 1
type Scale "ISK" "ISK" Source #

Icelandic króna

Instance details

Defined in Money

type Scale "ISK" "ISK" = (,) 100 1
type Scale "ISK" "eyrir" Source # 
Instance details

Defined in Money

type Scale "ISK" "eyrir" = (,) 100 1
type Scale "ISK" "krona" Source # 
Instance details

Defined in Money

type Scale "ISK" "krona" = (,) 1 1
type Scale "JMD" "JMD" Source #

Jamaican dollar

Instance details

Defined in Money

type Scale "JMD" "JMD" = (,) 100 1
type Scale "JMD" "cent" Source # 
Instance details

Defined in Money

type Scale "JMD" "cent" = (,) 100 1
type Scale "JMD" "dollar" Source # 
Instance details

Defined in Money

type Scale "JMD" "dollar" = (,) 1 1
type Scale "JOD" "JOD" Source #

Jordanian dinar

Instance details

Defined in Money

type Scale "JOD" "JOD" = (,) 100 1
type Scale "JOD" "dinar" Source # 
Instance details

Defined in Money

type Scale "JOD" "dinar" = (,) 1 1
type Scale "JOD" "piastre" Source # 
Instance details

Defined in Money

type Scale "JOD" "piastre" = (,) 100 1
type Scale "JPY" "JPY" Source #

Japanese yen

Instance details

Defined in Money

type Scale "JPY" "JPY" = (,) 100 1
type Scale "JPY" "sen" Source # 
Instance details

Defined in Money

type Scale "JPY" "sen" = (,) 100 1
type Scale "JPY" "yen" Source # 
Instance details

Defined in Money

type Scale "JPY" "yen" = (,) 1 1
type Scale "KES" "KES" Source #

Kenyan shilling

Instance details

Defined in Money

type Scale "KES" "KES" = (,) 100 1
type Scale "KES" "cent" Source # 
Instance details

Defined in Money

type Scale "KES" "cent" = (,) 100 1
type Scale "KES" "shilling" Source # 
Instance details

Defined in Money

type Scale "KES" "shilling" = (,) 1 1
type Scale "KGS" "KGS" Source #

Kyrgyzstani som

Instance details

Defined in Money

type Scale "KGS" "KGS" = (,) 100 1
type Scale "KGS" "som" Source # 
Instance details

Defined in Money

type Scale "KGS" "som" = (,) 1 1
type Scale "KGS" "tyiyn" Source # 
Instance details

Defined in Money

type Scale "KGS" "tyiyn" = (,) 100 1
type Scale "KHR" "KHR" Source #

Cambodian riel

Instance details

Defined in Money

type Scale "KHR" "KHR" = (,) 100 1
type Scale "KHR" "riel" Source # 
Instance details

Defined in Money

type Scale "KHR" "riel" = (,) 1 1
type Scale "KHR" "sen" Source # 
Instance details

Defined in Money

type Scale "KHR" "sen" = (,) 100 1
type Scale "KMF" "KMF" Source #

Comorian franc

Instance details

Defined in Money

type Scale "KMF" "KMF" = (,) 100 1
type Scale "KMF" "centime" Source # 
Instance details

Defined in Money

type Scale "KMF" "centime" = (,) 100 1
type Scale "KMF" "franc" Source # 
Instance details

Defined in Money

type Scale "KMF" "franc" = (,) 1 1
type Scale "KPW" "KPW" Source #

North Korean won

Instance details

Defined in Money

type Scale "KPW" "KPW" = (,) 100 1
type Scale "KPW" "chon" Source # 
Instance details

Defined in Money

type Scale "KPW" "chon" = (,) 100 1
type Scale "KPW" "won" Source # 
Instance details

Defined in Money

type Scale "KPW" "won" = (,) 1 1
type Scale "KRW" "KRW" Source #

South Korean won

Instance details

Defined in Money

type Scale "KRW" "KRW" = (,) 100 1
type Scale "KRW" "jeon" Source # 
Instance details

Defined in Money

type Scale "KRW" "jeon" = (,) 100 1
type Scale "KRW" "won" Source # 
Instance details

Defined in Money

type Scale "KRW" "won" = (,) 1 1
type Scale "KWD" "KWD" Source #

Kuwaiti dinar

Instance details

Defined in Money

type Scale "KWD" "KWD" = (,) 1000 1
type Scale "KWD" "dinar" Source # 
Instance details

Defined in Money

type Scale "KWD" "dinar" = (,) 1 1
type Scale "KWD" "fils" Source # 
Instance details

Defined in Money

type Scale "KWD" "fils" = (,) 1000 1
type Scale "KYD" "KYD" Source #

Cayman Islands dollar

Instance details

Defined in Money

type Scale "KYD" "KYD" = (,) 100 1
type Scale "KYD" "cent" Source # 
Instance details

Defined in Money

type Scale "KYD" "cent" = (,) 100 1
type Scale "KYD" "dollar" Source # 
Instance details

Defined in Money

type Scale "KYD" "dollar" = (,) 1 1
type Scale "KZT" "KZT" Source #

Kazakhstani tenge

Instance details

Defined in Money

type Scale "KZT" "KZT" = (,) 100 1
type Scale "KZT" "tenge" Source # 
Instance details

Defined in Money

type Scale "KZT" "tenge" = (,) 1 1
type Scale "KZT" "tiyin" Source # 
Instance details

Defined in Money

type Scale "KZT" "tiyin" = (,) 100 1
type Scale "LAK" "LAK" Source #

Lao kip

Instance details

Defined in Money

type Scale "LAK" "LAK" = (,) 100 1
type Scale "LAK" "att" Source # 
Instance details

Defined in Money

type Scale "LAK" "att" = (,) 100 1
type Scale "LAK" "kip" Source # 
Instance details

Defined in Money

type Scale "LAK" "kip" = (,) 1 1
type Scale "LBP" "LBP" Source #

Lebanese pound

Instance details

Defined in Money

type Scale "LBP" "LBP" = (,) 100 1
type Scale "LBP" "piastre" Source # 
Instance details

Defined in Money

type Scale "LBP" "piastre" = (,) 100 1
type Scale "LBP" "pound" Source # 
Instance details

Defined in Money

type Scale "LBP" "pound" = (,) 1 1
type Scale "LKR" "LKR" Source #

Sri Lankan rupee

Instance details

Defined in Money

type Scale "LKR" "LKR" = (,) 100 1
type Scale "LKR" "cent" Source # 
Instance details

Defined in Money

type Scale "LKR" "cent" = (,) 100 1
type Scale "LKR" "rupee" Source # 
Instance details

Defined in Money

type Scale "LKR" "rupee" = (,) 1 1
type Scale "LRD" "LRD" Source #

Liberian dollar

Instance details

Defined in Money

type Scale "LRD" "LRD" = (,) 100 1
type Scale "LRD" "cent" Source # 
Instance details

Defined in Money

type Scale "LRD" "cent" = (,) 100 1
type Scale "LRD" "dollar" Source # 
Instance details

Defined in Money

type Scale "LRD" "dollar" = (,) 1 1
type Scale "LSL" "LSL" Source #

Lesotho loti

Instance details

Defined in Money

type Scale "LSL" "LSL" = (,) 100 1
type Scale "LSL" "loti" Source # 
Instance details

Defined in Money

type Scale "LSL" "loti" = (,) 1 1
type Scale "LSL" "sente" Source # 
Instance details

Defined in Money

type Scale "LSL" "sente" = (,) 100 1
type Scale "LTC" "LTC" Source #

Litecoin

Instance details

Defined in Money

type Scale "LTC" "LTC" = (,) 100000000 1
type Scale "LTC" "lite" Source # 
Instance details

Defined in Money

type Scale "LTC" "lite" = (,) 1000 1
type Scale "LTC" "litecoin" Source # 
Instance details

Defined in Money

type Scale "LTC" "litecoin" = (,) 1 1
type Scale "LTC" "photon" Source # 
Instance details

Defined in Money

type Scale "LTC" "photon" = (,) 100000000 1
type Scale "LYD" "LYD" Source #

Libyan dinar

Instance details

Defined in Money

type Scale "LYD" "LYD" = (,) 100 1
type Scale "LYD" "dinar" Source # 
Instance details

Defined in Money

type Scale "LYD" "dinar" = (,) 1 1
type Scale "LYD" "dirham" Source # 
Instance details

Defined in Money

type Scale "LYD" "dirham" = (,) 1000 1
type Scale "MAD" "MAD" Source #

Moroccan dirham

Instance details

Defined in Money

type Scale "MAD" "MAD" = (,) 100 1
type Scale "MAD" "centime" Source # 
Instance details

Defined in Money

type Scale "MAD" "centime" = (,) 100 1
type Scale "MAD" "dirham" Source # 
Instance details

Defined in Money

type Scale "MAD" "dirham" = (,) 1 1
type Scale "MDL" "MDL" Source #

Moldovan leu

Instance details

Defined in Money

type Scale "MDL" "MDL" = (,) 100 1
type Scale "MDL" "ban" Source # 
Instance details

Defined in Money

type Scale "MDL" "ban" = (,) 100 1
type Scale "MDL" "leu" Source # 
Instance details

Defined in Money

type Scale "MDL" "leu" = (,) 100 1
type Scale "MGA" "MGA" Source #

Malagasy ariary

Instance details

Defined in Money

type Scale "MGA" "MGA" = (,) 5 1
type Scale "MGA" "ariary" Source # 
Instance details

Defined in Money

type Scale "MGA" "ariary" = (,) 1 1
type Scale "MGA" "iraimbilanja" Source # 
Instance details

Defined in Money

type Scale "MGA" "iraimbilanja" = (,) 5 1
type Scale "MKD" "MKD" Source #

Macedonian denar

Instance details

Defined in Money

type Scale "MKD" "MKD" = (,) 100 1
type Scale "MKD" "denar" Source # 
Instance details

Defined in Money

type Scale "MKD" "denar" = (,) 1 1
type Scale "MKD" "deni" Source # 
Instance details

Defined in Money

type Scale "MKD" "deni" = (,) 100 1
type Scale "MMK" "MMK" Source #

Myanmar kyat

Instance details

Defined in Money

type Scale "MMK" "MMK" = (,) 100 1
type Scale "MMK" "kyat" Source # 
Instance details

Defined in Money

type Scale "MMK" "kyat" = (,) 1 1
type Scale "MMK" "pya" Source # 
Instance details

Defined in Money

type Scale "MMK" "pya" = (,) 100 1
type Scale "MNT" "MNT" Source #

Mongolian tugrik

Instance details

Defined in Money

type Scale "MNT" "MNT" = (,) 100 1
type Scale "MNT" "mongo" Source # 
Instance details

Defined in Money

type Scale "MNT" "mongo" = (,) 100 1
type Scale "MNT" "tugrik" Source # 
Instance details

Defined in Money

type Scale "MNT" "tugrik" = (,) 1 1
type Scale "MOP" "MOP" Source #

Macanese pataca

Instance details

Defined in Money

type Scale "MOP" "MOP" = (,) 100 1
type Scale "MOP" "avo" Source # 
Instance details

Defined in Money

type Scale "MOP" "avo" = (,) 100 1
type Scale "MOP" "pataca" Source # 
Instance details

Defined in Money

type Scale "MOP" "pataca" = (,) 1 1
type Scale "MRO" "MRO" Source #

Mauritanian ouguiya

Instance details

Defined in Money

type Scale "MRO" "MRO" = (,) 5 1
type Scale "MRO" "khoums" Source # 
Instance details

Defined in Money

type Scale "MRO" "khoums" = (,) 5 1
type Scale "MRO" "ouguiya" Source # 
Instance details

Defined in Money

type Scale "MRO" "ouguiya" = (,) 1 1
type Scale "MUR" "MUR" Source #

Mauritian rupee

Instance details

Defined in Money

type Scale "MUR" "MUR" = (,) 100 1
type Scale "MUR" "cent" Source # 
Instance details

Defined in Money

type Scale "MUR" "cent" = (,) 100 1
type Scale "MUR" "rupee" Source # 
Instance details

Defined in Money

type Scale "MUR" "rupee" = (,) 1 1
type Scale "MVR" "MVR" Source #

Maldivian rufiyaa

Instance details

Defined in Money

type Scale "MVR" "MVR" = (,) 100 1
type Scale "MVR" "laari" Source # 
Instance details

Defined in Money

type Scale "MVR" "laari" = (,) 100 1
type Scale "MVR" "rufiyaa" Source # 
Instance details

Defined in Money

type Scale "MVR" "rufiyaa" = (,) 1 1
type Scale "MWK" "MWK" Source #

Malawian kwacha

Instance details

Defined in Money

type Scale "MWK" "MWK" = (,) 100 1
type Scale "MWK" "kwacha" Source # 
Instance details

Defined in Money

type Scale "MWK" "kwacha" = (,) 1 1
type Scale "MWK" "tambala" Source # 
Instance details

Defined in Money

type Scale "MWK" "tambala" = (,) 100 1
type Scale "MXN" "MXN" Source #

Mexican peso

Instance details

Defined in Money

type Scale "MXN" "MXN" = (,) 100 1
type Scale "MXN" "centavo" Source # 
Instance details

Defined in Money

type Scale "MXN" "centavo" = (,) 100 1
type Scale "MXN" "peso" Source # 
Instance details

Defined in Money

type Scale "MXN" "peso" = (,) 1 1
type Scale "MXV" "MXV" Source #

Mexican unidad de inversion

Instance details

Defined in Money

type Scale "MXV" "MXV" = (,) 100 1
type Scale "MYR" "MYR" Source #

Malaysian ringgit

Instance details

Defined in Money

type Scale "MYR" "MYR" = (,) 100 1
type Scale "MYR" "ringgit" Source # 
Instance details

Defined in Money

type Scale "MYR" "ringgit" = (,) 1 1
type Scale "MYR" "sen" Source # 
Instance details

Defined in Money

type Scale "MYR" "sen" = (,) 100 1
type Scale "MZN" "MZN" Source #

Mozambican metical

Instance details

Defined in Money

type Scale "MZN" "MZN" = (,) 100 1
type Scale "MZN" "centavo" Source # 
Instance details

Defined in Money

type Scale "MZN" "centavo" = (,) 100 1
type Scale "MZN" "metical" Source # 
Instance details

Defined in Money

type Scale "MZN" "metical" = (,) 1 1
type Scale "NAD" "NAD" Source #

Namibian dollar

Instance details

Defined in Money

type Scale "NAD" "NAD" = (,) 100 1
type Scale "NAD" "cent" Source # 
Instance details

Defined in Money

type Scale "NAD" "cent" = (,) 100 1
type Scale "NAD" "dollar" Source # 
Instance details

Defined in Money

type Scale "NAD" "dollar" = (,) 1 1
type Scale "NGN" "NGN" Source #

Nigerian naira

Instance details

Defined in Money

type Scale "NGN" "NGN" = (,) 100 1
type Scale "NGN" "kobo" Source # 
Instance details

Defined in Money

type Scale "NGN" "kobo" = (,) 100 1
type Scale "NGN" "naira" Source # 
Instance details

Defined in Money

type Scale "NGN" "naira" = (,) 1 1
type Scale "NIO" "NIO" Source #

Nicaraguan cordoba

Instance details

Defined in Money

type Scale "NIO" "NIO" = (,) 100 1
type Scale "NIO" "centavo" Source # 
Instance details

Defined in Money

type Scale "NIO" "centavo" = (,) 100 1
type Scale "NIO" "cordoba" Source # 
Instance details

Defined in Money

type Scale "NIO" "cordoba" = (,) 1 1
type Scale "NOK" "NOK" Source #

Norwegian krone

Instance details

Defined in Money

type Scale "NOK" "NOK" = (,) 100 1
type Scale "NOK" "krone" Source # 
Instance details

Defined in Money

type Scale "NOK" "krone" = (,) 1 1
type Scale "NOK" "ore" Source # 
Instance details

Defined in Money

type Scale "NOK" "ore" = (,) 100 1
type Scale "NPR" "NPR" Source #

Nepalese rupee

Instance details

Defined in Money

type Scale "NPR" "NPR" = (,) 100 1
type Scale "NPR" "paisa" Source # 
Instance details

Defined in Money

type Scale "NPR" "paisa" = (,) 100 1
type Scale "NPR" "rupee" Source # 
Instance details

Defined in Money

type Scale "NPR" "rupee" = (,) 1 1
type Scale "NZD" "NZD" Source #

New Zealand dollar

Instance details

Defined in Money

type Scale "NZD" "NZD" = (,) 100 1
type Scale "NZD" "cent" Source # 
Instance details

Defined in Money

type Scale "NZD" "cent" = (,) 100 1
type Scale "NZD" "dollar" Source # 
Instance details

Defined in Money

type Scale "NZD" "dollar" = (,) 1 1
type Scale "OMR" "OMR" Source #

Omani rial

Instance details

Defined in Money

type Scale "OMR" "OMR" = (,) 1000 1
type Scale "OMR" "baisa" Source # 
Instance details

Defined in Money

type Scale "OMR" "baisa" = (,) 1000 1
type Scale "OMR" "rial" Source # 
Instance details

Defined in Money

type Scale "OMR" "rial" = (,) 1 1
type Scale "PAB" "PAB" Source #

Panamenian balboa

Instance details

Defined in Money

type Scale "PAB" "PAB" = (,) 100 1
type Scale "PAB" "balboa" Source # 
Instance details

Defined in Money

type Scale "PAB" "balboa" = (,) 1 1
type Scale "PAB" "centesimo" Source # 
Instance details

Defined in Money

type Scale "PAB" "centesimo" = (,) 100 1
type Scale "PEN" "PEN" Source #

Peruvian sol

Instance details

Defined in Money

type Scale "PEN" "PEN" = (,) 100 1
type Scale "PEN" "centimo" Source # 
Instance details

Defined in Money

type Scale "PEN" "centimo" = (,) 100 1
type Scale "PEN" "sol" Source # 
Instance details

Defined in Money

type Scale "PEN" "sol" = (,) 1 1
type Scale "PGK" "PGK" Source #

Papua New Guinean kina

Instance details

Defined in Money

type Scale "PGK" "PGK" = (,) 100 1
type Scale "PGK" "kina" Source # 
Instance details

Defined in Money

type Scale "PGK" "kina" = (,) 1 1
type Scale "PGK" "toea" Source # 
Instance details

Defined in Money

type Scale "PGK" "toea" = (,) 100 1
type Scale "PHP" "PHP" Source #

Philippine peso

Instance details

Defined in Money

type Scale "PHP" "PHP" = (,) 100 1
type Scale "PHP" "centavo" Source # 
Instance details

Defined in Money

type Scale "PHP" "centavo" = (,) 100 1
type Scale "PHP" "peso" Source # 
Instance details

Defined in Money

type Scale "PHP" "peso" = (,) 1 1
type Scale "PKR" "PKR" Source #

Pakistani rupee

Instance details

Defined in Money

type Scale "PKR" "PKR" = (,) 100 1
type Scale "PKR" "paisa" Source # 
Instance details

Defined in Money

type Scale "PKR" "paisa" = (,) 100 1
type Scale "PKR" "rupee" Source # 
Instance details

Defined in Money

type Scale "PKR" "rupee" = (,) 1 1
type Scale "PLN" "PLN" Source #

Polish zloty

Instance details

Defined in Money

type Scale "PLN" "PLN" = (,) 100 1
type Scale "PLN" "grosz" Source # 
Instance details

Defined in Money

type Scale "PLN" "grosz" = (,) 100 1
type Scale "PLN" "zloty" Source # 
Instance details

Defined in Money

type Scale "PLN" "zloty" = (,) 1 1
type Scale "PYG" "PYG" Source #

Paraguayan guarani

Instance details

Defined in Money

type Scale "PYG" "PYG" = (,) 100 1
type Scale "PYG" "centimo" Source # 
Instance details

Defined in Money

type Scale "PYG" "centimo" = (,) 100 1
type Scale "PYG" "guarani" Source # 
Instance details

Defined in Money

type Scale "PYG" "guarani" = (,) 1 1
type Scale "QAR" "QAR" Source #

Qatari riyal

Instance details

Defined in Money

type Scale "QAR" "QAR" = (,) 100 1
type Scale "QAR" "dirham" Source # 
Instance details

Defined in Money

type Scale "QAR" "dirham" = (,) 100 1
type Scale "QAR" "riyal" Source # 
Instance details

Defined in Money

type Scale "QAR" "riyal" = (,) 1 1
type Scale "RON" "RON" Source #

Romanian leu

Instance details

Defined in Money

type Scale "RON" "RON" = (,) 100 1
type Scale "RON" "ban" Source # 
Instance details

Defined in Money

type Scale "RON" "ban" = (,) 100 1
type Scale "RON" "leu" Source # 
Instance details

Defined in Money

type Scale "RON" "leu" = (,) 1 1
type Scale "RSD" "RSD" Source #

Serbian dinar

Instance details

Defined in Money

type Scale "RSD" "RSD" = (,) 100 1
type Scale "RSD" "dinar" Source # 
Instance details

Defined in Money

type Scale "RSD" "dinar" = (,) 1 1
type Scale "RSD" "para" Source # 
Instance details

Defined in Money

type Scale "RSD" "para" = (,) 100 1
type Scale "RUB" "RUB" Source #

Russian ruble

Instance details

Defined in Money

type Scale "RUB" "RUB" = (,) 100 1
type Scale "RUB" "kopek" Source # 
Instance details

Defined in Money

type Scale "RUB" "kopek" = (,) 100 1
type Scale "RUB" "ruble" Source # 
Instance details

Defined in Money

type Scale "RUB" "ruble" = (,) 1 1
type Scale "RWF" "RWF" Source #

Rwandan franc

Instance details

Defined in Money

type Scale "RWF" "RWF" = (,) 100 1
type Scale "RWF" "centime" Source # 
Instance details

Defined in Money

type Scale "RWF" "centime" = (,) 100 1
type Scale "RWF" "franc" Source # 
Instance details

Defined in Money

type Scale "RWF" "franc" = (,) 1 1
type Scale "SAR" "SAR" Source #

Saudi Arabian riyal

Instance details

Defined in Money

type Scale "SAR" "SAR" = (,) 100 1
type Scale "SAR" "halala" Source # 
Instance details

Defined in Money

type Scale "SAR" "halala" = (,) 100 1
type Scale "SAR" "riyal" Source # 
Instance details

Defined in Money

type Scale "SAR" "riyal" = (,) 1 1
type Scale "SBD" "SBD" Source #

Solomon Islands dollar

Instance details

Defined in Money

type Scale "SBD" "SBD" = (,) 100 1
type Scale "SBD" "cent" Source # 
Instance details

Defined in Money

type Scale "SBD" "cent" = (,) 100 1
type Scale "SBD" "dollar" Source # 
Instance details

Defined in Money

type Scale "SBD" "dollar" = (,) 100 1
type Scale "SCR" "SCR" Source #

Seychellois rupee

Instance details

Defined in Money

type Scale "SCR" "SCR" = (,) 100 1
type Scale "SCR" "cent" Source # 
Instance details

Defined in Money

type Scale "SCR" "cent" = (,) 100 1
type Scale "SCR" "rupee" Source # 
Instance details

Defined in Money

type Scale "SCR" "rupee" = (,) 1 1
type Scale "SDG" "SDG" Source #

Sudanese pound

Instance details

Defined in Money

type Scale "SDG" "SDG" = (,) 100 1
type Scale "SDG" "piastre" Source # 
Instance details

Defined in Money

type Scale "SDG" "piastre" = (,) 100 1
type Scale "SDG" "pound" Source # 
Instance details

Defined in Money

type Scale "SDG" "pound" = (,) 1 1
type Scale "SEK" "SEK" Source #

Swedish krona

Instance details

Defined in Money

type Scale "SEK" "SEK" = (,) 100 1
type Scale "SEK" "krona" Source # 
Instance details

Defined in Money

type Scale "SEK" "krona" = (,) 1 1
type Scale "SEK" "ore" Source # 
Instance details

Defined in Money

type Scale "SEK" "ore" = (,) 100 1
type Scale "SGD" "SGD" Source #

Singapore dollar

Instance details

Defined in Money

type Scale "SGD" "SGD" = (,) 100 1
type Scale "SGD" "cent" Source # 
Instance details

Defined in Money

type Scale "SGD" "cent" = (,) 100 1
type Scale "SGD" "dollar" Source # 
Instance details

Defined in Money

type Scale "SGD" "dollar" = (,) 1 1
type Scale "SHP" "SHP" Source #

Saint Helena pound

Instance details

Defined in Money

type Scale "SHP" "SHP" = (,) 100 1
type Scale "SHP" "penny" Source # 
Instance details

Defined in Money

type Scale "SHP" "penny" = (,) 100 1
type Scale "SHP" "pound" Source # 
Instance details

Defined in Money

type Scale "SHP" "pound" = (,) 1 1
type Scale "SLL" "SLL" Source #

Sierra Leonean leone

Instance details

Defined in Money

type Scale "SLL" "SLL" = (,) 100 1
type Scale "SLL" "cent" Source # 
Instance details

Defined in Money

type Scale "SLL" "cent" = (,) 100 1
type Scale "SLL" "leone" Source # 
Instance details

Defined in Money

type Scale "SLL" "leone" = (,) 1 1
type Scale "SOS" "SOS" Source #

Somali shilling

Instance details

Defined in Money

type Scale "SOS" "SOS" = (,) 100 1
type Scale "SOS" "cent" Source # 
Instance details

Defined in Money

type Scale "SOS" "cent" = (,) 100 1
type Scale "SOS" "shilling" Source # 
Instance details

Defined in Money

type Scale "SOS" "shilling" = (,) 1 1
type Scale "SRD" "SRD" Source #

Surinamese dollar

Instance details

Defined in Money

type Scale "SRD" "SRD" = (,) 100 1
type Scale "SRD" "cent" Source # 
Instance details

Defined in Money

type Scale "SRD" "cent" = (,) 100 1
type Scale "SRD" "dollar" Source # 
Instance details

Defined in Money

type Scale "SRD" "dollar" = (,) 1 1
type Scale "SSP" "SSP" Source #

South Sudanese pound

Instance details

Defined in Money

type Scale "SSP" "SSP" = (,) 100 1
type Scale "SSP" "piastre" Source # 
Instance details

Defined in Money

type Scale "SSP" "piastre" = (,) 100 1
type Scale "SSP" "pound" Source # 
Instance details

Defined in Money

type Scale "SSP" "pound" = (,) 1 1
type Scale "STD" "STD" Source #

Sao Tome and Principe dobra

Instance details

Defined in Money

type Scale "STD" "STD" = (,) 100 1
type Scale "STD" "centimo" Source # 
Instance details

Defined in Money

type Scale "STD" "centimo" = (,) 100 1
type Scale "STD" "dobra" Source # 
Instance details

Defined in Money

type Scale "STD" "dobra" = (,) 1 1
type Scale "SVC" "SVC" Source #

Salvadoran colon

Instance details

Defined in Money

type Scale "SVC" "SVC" = (,) 100 1
type Scale "SVC" "centavo" Source # 
Instance details

Defined in Money

type Scale "SVC" "centavo" = (,) 100 1
type Scale "SVC" "colon" Source # 
Instance details

Defined in Money

type Scale "SVC" "colon" = (,) 1 1
type Scale "SYP" "SYP" Source #

Syrian pound

Instance details

Defined in Money

type Scale "SYP" "SYP" = (,) 100 1
type Scale "SYP" "piastre" Source # 
Instance details

Defined in Money

type Scale "SYP" "piastre" = (,) 100 1
type Scale "SYP" "pound" Source # 
Instance details

Defined in Money

type Scale "SYP" "pound" = (,) 1 1
type Scale "SZL" "SZL" Source #

Swazi lilangeni

Instance details

Defined in Money

type Scale "SZL" "SZL" = (,) 100 1
type Scale "SZL" "cent" Source # 
Instance details

Defined in Money

type Scale "SZL" "cent" = (,) 100 1
type Scale "SZL" "lilangeni" Source # 
Instance details

Defined in Money

type Scale "SZL" "lilangeni" = (,) 1 1
type Scale "THB" "THB" Source #

Thai baht

Instance details

Defined in Money

type Scale "THB" "THB" = (,) 100 1
type Scale "THB" "baht" Source # 
Instance details

Defined in Money

type Scale "THB" "baht" = (,) 1 1
type Scale "THB" "satang" Source # 
Instance details

Defined in Money

type Scale "THB" "satang" = (,) 100 1
type Scale "TJS" "TJS" Source #

Tajikistani somoni

Instance details

Defined in Money

type Scale "TJS" "TJS" = (,) 100 1
type Scale "TJS" "diram" Source # 
Instance details

Defined in Money

type Scale "TJS" "diram" = (,) 100 1
type Scale "TJS" "somoni" Source # 
Instance details

Defined in Money

type Scale "TJS" "somoni" = (,) 1 1
type Scale "TMT" "TMT" Source #

Turkmen manat

Instance details

Defined in Money

type Scale "TMT" "TMT" = (,) 100 1
type Scale "TMT" "manat" Source # 
Instance details

Defined in Money

type Scale "TMT" "manat" = (,) 1 1
type Scale "TMT" "tennesi" Source # 
Instance details

Defined in Money

type Scale "TMT" "tennesi" = (,) 100 1
type Scale "TND" "TND" Source #

Tunisian dinar

Instance details

Defined in Money

type Scale "TND" "TND" = (,) 1000 1
type Scale "TND" "dinar" Source # 
Instance details

Defined in Money

type Scale "TND" "dinar" = (,) 1 1
type Scale "TND" "millime" Source # 
Instance details

Defined in Money

type Scale "TND" "millime" = (,) 1000 1
type Scale "TOP" "TOP" Source #

Tongan pa’anga

Instance details

Defined in Money

type Scale "TOP" "TOP" = (,) 100 1
type Scale "TOP" "pa'anga" Source # 
Instance details

Defined in Money

type Scale "TOP" "pa'anga" = (,) 1 1
type Scale "TOP" "seniti" Source # 
Instance details

Defined in Money

type Scale "TOP" "seniti" = (,) 100 1
type Scale "TRY" "TRY" Source #

Turkish lira

Instance details

Defined in Money

type Scale "TRY" "TRY" = (,) 100 1
type Scale "TRY" "kurus" Source # 
Instance details

Defined in Money

type Scale "TRY" "kurus" = (,) 100 1
type Scale "TRY" "lira" Source # 
Instance details

Defined in Money

type Scale "TRY" "lira" = (,) 1 1
type Scale "TTD" "TTD" Source #

Tobago Trinidad and Tobago dollar

Instance details

Defined in Money

type Scale "TTD" "TTD" = (,) 100 1
type Scale "TTD" "cent" Source # 
Instance details

Defined in Money

type Scale "TTD" "cent" = (,) 100 1
type Scale "TTD" "dollar" Source # 
Instance details

Defined in Money

type Scale "TTD" "dollar" = (,) 1 1
type Scale "TWD" "TWD" Source #

New Taiwan dollar

Instance details

Defined in Money

type Scale "TWD" "TWD" = (,) 100 1
type Scale "TWD" "cent" Source # 
Instance details

Defined in Money

type Scale "TWD" "cent" = (,) 100 1
type Scale "TWD" "dollar" Source # 
Instance details

Defined in Money

type Scale "TWD" "dollar" = (,) 1 1
type Scale "TZS" "TZS" Source #

Tanzanian shilling

Instance details

Defined in Money

type Scale "TZS" "TZS" = (,) 100 1
type Scale "TZS" "cent" Source # 
Instance details

Defined in Money

type Scale "TZS" "cent" = (,) 100 1
type Scale "TZS" "shilling" Source # 
Instance details

Defined in Money

type Scale "TZS" "shilling" = (,) 1 1
type Scale "UAH" "UAH" Source #

Ukrainian hryvnia

Instance details

Defined in Money

type Scale "UAH" "UAH" = (,) 100 1
type Scale "UAH" "hryvnia" Source # 
Instance details

Defined in Money

type Scale "UAH" "hryvnia" = (,) 1 1
type Scale "UAH" "kopiyka" Source # 
Instance details

Defined in Money

type Scale "UAH" "kopiyka" = (,) 100 1
type Scale "UGX" "UGX" Source #

Ugandan shilling

Instance details

Defined in Money

type Scale "UGX" "UGX" = (,) 100 1
type Scale "UGX" "cent" Source # 
Instance details

Defined in Money

type Scale "UGX" "cent" = (,) 100 1
type Scale "UGX" "shilling" Source # 
Instance details

Defined in Money

type Scale "UGX" "shilling" = (,) 1 1
type Scale "USD" "USD" Source #

United States dollar

Instance details

Defined in Money

type Scale "USD" "USD" = (,) 100 1
type Scale "USD" "cent" Source # 
Instance details

Defined in Money

type Scale "USD" "cent" = (,) 100 1
type Scale "USD" "dollar" Source # 
Instance details

Defined in Money

type Scale "USD" "dollar" = (,) 1 1
type Scale "USN" "USN" Source #

United States dollar (next day)

Instance details

Defined in Money

type Scale "USN" "USN" = (,) 100 1
type Scale "UYI" "UYI" Source #

Uruguayan peso en unidades

Instance details

Defined in Money

type Scale "UYI" "UYI" = (,) 100 1
type Scale "UYU" "UYU" Source #

Uruguayan peso

Instance details

Defined in Money

type Scale "UYU" "UYU" = (,) 100 1
type Scale "UYU" "centesimo" Source # 
Instance details

Defined in Money

type Scale "UYU" "centesimo" = (,) 100 1
type Scale "UYU" "peso" Source # 
Instance details

Defined in Money

type Scale "UYU" "peso" = (,) 1 1
type Scale "UZS" "UZS" Source #

Uzbekistani som

Instance details

Defined in Money

type Scale "UZS" "UZS" = (,) 100 1
type Scale "UZS" "som" Source # 
Instance details

Defined in Money

type Scale "UZS" "som" = (,) 1 1
type Scale "UZS" "tiyin" Source # 
Instance details

Defined in Money

type Scale "UZS" "tiyin" = (,) 100 1
type Scale "VEF" "VEF" Source #

Venezuelan bolivar

Instance details

Defined in Money

type Scale "VEF" "VEF" = (,) 100 1
type Scale "VEF" "bolivar" Source # 
Instance details

Defined in Money

type Scale "VEF" "bolivar" = (,) 1 1
type Scale "VEF" "centimo" Source # 
Instance details

Defined in Money

type Scale "VEF" "centimo" = (,) 100 1
type Scale "VND" "VND" Source #

Vietnamese dong

Instance details

Defined in Money

type Scale "VND" "VND" = (,) 10 1
type Scale "VND" "dong" Source # 
Instance details

Defined in Money

type Scale "VND" "dong" = (,) 1 1
type Scale "VND" "hao" Source # 
Instance details

Defined in Money

type Scale "VND" "hao" = (,) 10 1
type Scale "VUV" "VUV" Source #

Vanuatu vatu

Instance details

Defined in Money

type Scale "VUV" "VUV" = (,) 1 1
type Scale "VUV" "vatu" Source # 
Instance details

Defined in Money

type Scale "VUV" "vatu" = (,) 1 1
type Scale "WST" "WST" Source #

Samoan tālā

Instance details

Defined in Money

type Scale "WST" "WST" = (,) 100 1
type Scale "WST" "sene" Source # 
Instance details

Defined in Money

type Scale "WST" "sene" = (,) 100 1
type Scale "WST" "tala" Source # 
Instance details

Defined in Money

type Scale "WST" "tala" = (,) 1 1
type Scale "XAF" "XAF" Source #

Central African CFA franc

Instance details

Defined in Money

type Scale "XAF" "XAF" = (,) 100 1
type Scale "XAF" "centime" Source # 
Instance details

Defined in Money

type Scale "XAF" "centime" = (,) 100 1
type Scale "XAF" "franc" Source # 
Instance details

Defined in Money

type Scale "XAF" "franc" = (,) 1 1
type Scale "XAG" "XAG" Source #

Silver. No canonical smallest unit. Unusable instance.

Instance details

Defined in Money

type Scale "XAG" "XAG" = (ErrScaleNonCanonical "XAG" :: (Nat, Nat))
type Scale "XAG" "grain" Source # 
Instance details

Defined in Money

type Scale "XAG" "grain" = (,) 480 1
type Scale "XAG" "gram" Source # 
Instance details

Defined in Money

type Scale "XAG" "gram" = (,) 31103477 1000000
type Scale "XAG" "kilogram" Source # 
Instance details

Defined in Money

type Scale "XAG" "kilogram" = (,) 31103477 1000000000
type Scale "XAG" "micrograin" Source # 
Instance details

Defined in Money

type Scale "XAG" "micrograin" = (,) 480000000 1
type Scale "XAG" "microgram" Source # 
Instance details

Defined in Money

type Scale "XAG" "microgram" = (,) 31103477 1
type Scale "XAG" "milligrain" Source # 
Instance details

Defined in Money

type Scale "XAG" "milligrain" = (,) 480000 1
type Scale "XAG" "milligram" Source # 
Instance details

Defined in Money

type Scale "XAG" "milligram" = (,) 31103477 1000
type Scale "XAG" "troy-ounce" Source # 
Instance details

Defined in Money

type Scale "XAG" "troy-ounce" = (,) 1 1
type Scale "XAU" "XAU" Source #

Gold. No canonical smallest unit. Unusable instance.

Instance details

Defined in Money

type Scale "XAU" "XAU" = (ErrScaleNonCanonical "XAU" :: (Nat, Nat))
type Scale "XAU" "grain" Source # 
Instance details

Defined in Money

type Scale "XAU" "grain" = (,) 480 1
type Scale "XAU" "gram" Source # 
Instance details

Defined in Money

type Scale "XAU" "gram" = (,) 31103477 1000000
type Scale "XAU" "kilogram" Source # 
Instance details

Defined in Money

type Scale "XAU" "kilogram" = (,) 31103477 1000000000
type Scale "XAU" "micrograin" Source # 
Instance details

Defined in Money

type Scale "XAU" "micrograin" = (,) 480000000 1
type Scale "XAU" "microgram" Source # 
Instance details

Defined in Money

type Scale "XAU" "microgram" = (,) 31103477 1
type Scale "XAU" "milligrain" Source # 
Instance details

Defined in Money

type Scale "XAU" "milligrain" = (,) 480000 1
type Scale "XAU" "milligram" Source # 
Instance details

Defined in Money

type Scale "XAU" "milligram" = (,) 31103477 1000
type Scale "XAU" "troy-ounce" Source # 
Instance details

Defined in Money

type Scale "XAU" "troy-ounce" = (,) 1 1
type Scale "XBT" "XBT" Source #

Bitcoin

Instance details

Defined in Money

type Scale "XBT" "XBT" = (,) 100000000 1
type Scale "XBT" "bitcoin" Source # 
Instance details

Defined in Money

type Scale "XBT" "bitcoin" = (,) 1 1
type Scale "XBT" "satoshi" Source # 
Instance details

Defined in Money

type Scale "XBT" "satoshi" = (,) 100000000 1
type Scale "XCD" "XCD" Source #

East Caribbean dollar

Instance details

Defined in Money

type Scale "XCD" "XCD" = (,) 100 1
type Scale "XCD" "cent" Source # 
Instance details

Defined in Money

type Scale "XCD" "cent" = (,) 100 1
type Scale "XCD" "dollar" Source # 
Instance details

Defined in Money

type Scale "XCD" "dollar" = (,) 1 1
type Scale "XDR" "XDR" Source #

International Monetary Fund Special Drawing Right

Instance details

Defined in Money

type Scale "XDR" "XDR" = (,) 100 1
type Scale "XMR" "XMR" Source #

Monero

Instance details

Defined in Money

type Scale "XMR" "XMR" = (,) 1000000000000 1
type Scale "XMR" "centinero" Source # 
Instance details

Defined in Money

type Scale "XMR" "centinero" = (,) 100 1
type Scale "XMR" "decinero" Source # 
Instance details

Defined in Money

type Scale "XMR" "decinero" = (,) 10 1
type Scale "XMR" "micronero" Source # 
Instance details

Defined in Money

type Scale "XMR" "micronero" = (,) 1000000 1
type Scale "XMR" "millinero" Source # 
Instance details

Defined in Money

type Scale "XMR" "millinero" = (,) 1000 1
type Scale "XMR" "monero" Source # 
Instance details

Defined in Money

type Scale "XMR" "monero" = (,) 1 1
type Scale "XMR" "nanonero" Source # 
Instance details

Defined in Money

type Scale "XMR" "nanonero" = (,) 1000000000 1
type Scale "XMR" "piconero" Source # 
Instance details

Defined in Money

type Scale "XMR" "piconero" = (,) 1000000000000 1
type Scale "XOF" "XOF" Source #

West African CFA franc

Instance details

Defined in Money

type Scale "XOF" "XOF" = (,) 100 1
type Scale "XOF" "centime" Source # 
Instance details

Defined in Money

type Scale "XOF" "centime" = (,) 100 1
type Scale "XOF" "franc" Source # 
Instance details

Defined in Money

type Scale "XOF" "franc" = (,) 1 1
type Scale "XPD" "XPD" Source #

Palladium. No canonical smallest unit. Unusable instance.

Instance details

Defined in Money

type Scale "XPD" "XPD" = (ErrScaleNonCanonical "XPD" :: (Nat, Nat))
type Scale "XPD" "grain" Source # 
Instance details

Defined in Money

type Scale "XPD" "grain" = (,) 480 1
type Scale "XPD" "gram" Source # 
Instance details

Defined in Money

type Scale "XPD" "gram" = (,) 31103477 1000000
type Scale "XPD" "kilogram" Source # 
Instance details

Defined in Money

type Scale "XPD" "kilogram" = (,) 31103477 1000000000
type Scale "XPD" "micrograin" Source # 
Instance details

Defined in Money

type Scale "XPD" "micrograin" = (,) 480000000 1
type Scale "XPD" "microgram" Source # 
Instance details

Defined in Money

type Scale "XPD" "microgram" = (,) 31103477 1
type Scale "XPD" "milligrain" Source # 
Instance details

Defined in Money

type Scale "XPD" "milligrain" = (,) 480000 1
type Scale "XPD" "milligram" Source # 
Instance details

Defined in Money

type Scale "XPD" "milligram" = (,) 31103477 1000
type Scale "XPD" "troy-ounce" Source # 
Instance details

Defined in Money

type Scale "XPD" "troy-ounce" = (,) 1 1
type Scale "XPF" "XPF" Source #

CFP franc

Instance details

Defined in Money

type Scale "XPF" "XPF" = (,) 100 1
type Scale "XPF" "centime" Source # 
Instance details

Defined in Money

type Scale "XPF" "centime" = (,) 100 1
type Scale "XPF" "franc" Source # 
Instance details

Defined in Money

type Scale "XPF" "franc" = (,) 1 1
type Scale "XPT" "XPT" Source #

Platinum. No canonical smallest unit. Unusable instance.

Instance details

Defined in Money

type Scale "XPT" "XPT" = (ErrScaleNonCanonical "XPT" :: (Nat, Nat))
type Scale "XPT" "grain" Source # 
Instance details

Defined in Money

type Scale "XPT" "grain" = (,) 480 1
type Scale "XPT" "gram" Source # 
Instance details

Defined in Money

type Scale "XPT" "gram" = (,) 31103477 1000000
type Scale "XPT" "kilogram" Source # 
Instance details

Defined in Money

type Scale "XPT" "kilogram" = (,) 31103477 1000000000
type Scale "XPT" "micrograin" Source # 
Instance details

Defined in Money

type Scale "XPT" "micrograin" = (,) 480000000 1
type Scale "XPT" "microgram" Source # 
Instance details

Defined in Money

type Scale "XPT" "microgram" = (,) 31103477 1
type Scale "XPT" "milligrain" Source # 
Instance details

Defined in Money

type Scale "XPT" "milligrain" = (,) 480000 1
type Scale "XPT" "milligram" Source # 
Instance details

Defined in Money

type Scale "XPT" "milligram" = (,) 31103477 1000
type Scale "XPT" "troy-ounce" Source # 
Instance details

Defined in Money

type Scale "XPT" "troy-ounce" = (,) 1 1
type Scale "XRP" "XRP" Source #

Ripple

Instance details

Defined in Money

type Scale "XRP" "XRP" = (,) 1000000 1
type Scale "XRP" "drop" Source # 
Instance details

Defined in Money

type Scale "XRP" "drop" = (,) 1000000 1
type Scale "XRP" "ripple" Source # 
Instance details

Defined in Money

type Scale "XRP" "ripple" = (,) 1 1
type Scale "XSU" "XSU" Source #

Sucre

Instance details

Defined in Money

type Scale "XSU" "XSU" = (,) 100 1
type Scale "XUA" "XUA" Source #

African Development Bank unit of account

Instance details

Defined in Money

type Scale "XUA" "XUA" = (,) 100 1
type Scale "YER" "YER" Source #

Yemeni rial

Instance details

Defined in Money

type Scale "YER" "YER" = (,) 100 1
type Scale "YER" "fils" Source # 
Instance details

Defined in Money

type Scale "YER" "fils" = (,) 100 1
type Scale "YER" "rial" Source # 
Instance details

Defined in Money

type Scale "YER" "rial" = (,) 1 1
type Scale "ZAR" "ZAR" Source #

South African rand

Instance details

Defined in Money

type Scale "ZAR" "ZAR" = (,) 100 1
type Scale "ZAR" "cent" Source # 
Instance details

Defined in Money

type Scale "ZAR" "cent" = (,) 100 1
type Scale "ZAR" "rand" Source # 
Instance details

Defined in Money

type Scale "ZAR" "rand" = (,) 1 1
type Scale "ZMW" "ZMW" Source #

Zambian kwacha

Instance details

Defined in Money

type Scale "ZMW" "ZMW" = (,) 100 1
type Scale "ZMW" "kwacha" Source # 
Instance details

Defined in Money

type Scale "ZMW" "kwacha" = (,) 1 1
type Scale "ZMW" "ngwee" Source # 
Instance details

Defined in Money

type Scale "ZMW" "ngwee" = (,) 100 1
type Scale "ZWL" "ZWL" Source #

Zimbawe dollar

Instance details

Defined in Money

type Scale "ZWL" "ZWL" = (,) 100 1
type Scale "ZWL" "cent" Source # 
Instance details

Defined in Money

type Scale "ZWL" "cent" = (,) 100 1
type Scale "ZWL" "dollar" Source # 
Instance details

Defined in Money

type Scale "ZWL" "dollar" = (,) 1 1

type GoodScale (scale :: (Nat, Nat)) = (CmpNat 0 (Fst scale) ~ LT, CmpNat 0 (Snd scale) ~ LT, KnownNat (Fst scale), KnownNat (Snd scale)) Source #

Constraints to a scale (like the one returned by Scale currency unit) expected to always be satisfied. In particular, the scale is always guaranteed to be a positive rational number (infinity and notANumber are forbidden by GoodScale).

type family ErrScaleNonCanonical (currency :: Symbol) :: k where ... Source #

A friendly TypeError to use for a currency that doesn't have a canonical small unit.

Equations

ErrScaleNonCanonical c = TypeError ((Text c :<>: Text " is not a currency with a canonical smallest unit,") :$$: Text "be explicit about the currency unit you want to use.") 

scale Source #

Arguments

:: GoodScale scale 
=> proxy scale 
-> Rational 

Term-level representation of a currrency scale.

For example, the Scale for "USD" in "cent"s is 100/1.

> scale (Proxy :: Proxy (Scale "USD" "cent"))
100 % 1
> scale (x :: Discrete "USD" "cent")
100 % 1

The returned Rational is statically guaranteed to be a positive number.

Currency exchange

data ExchangeRate (src :: Symbol) (dst :: Symbol) Source #

Exchange rate for converting monetary values of currency src into monetary values of currency dst by multiplying for it.

For example, if in order to convert USD to GBP we have to multiply by 1.2345, then we can represent this situaion using:

exchangeRate (12345 % 10000) :: Maybe (ExchangeRate "USD" "GBP")
Instances
Category ExchangeRate Source #

Composition of ExchangeRates multiplies exchange rates together:

exchangeRateToRational x * exchangeRateToRational y  ==  exchangeRateToRational (x . y)

Identity:

x  ==  x . id  ==  id . x

Associativity:

x . y . z  ==  x . (y . z)  ==  (x . y) . z

Conmutativity (provided the types allow for composition):

x . y  ==  y . x

Reciprocal:

1  ==  exchangeRateToRational (x . exchangeRateRecip x)
Instance details

Defined in Money.Internal

Methods

id :: ExchangeRate a a #

(.) :: ExchangeRate b c -> ExchangeRate a b -> ExchangeRate a c #

Eq (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

Methods

(==) :: ExchangeRate src dst -> ExchangeRate src dst -> Bool #

(/=) :: ExchangeRate src dst -> ExchangeRate src dst -> Bool #

Ord (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

Methods

compare :: ExchangeRate src dst -> ExchangeRate src dst -> Ordering #

(<) :: ExchangeRate src dst -> ExchangeRate src dst -> Bool #

(<=) :: ExchangeRate src dst -> ExchangeRate src dst -> Bool #

(>) :: ExchangeRate src dst -> ExchangeRate src dst -> Bool #

(>=) :: ExchangeRate src dst -> ExchangeRate src dst -> Bool #

max :: ExchangeRate src dst -> ExchangeRate src dst -> ExchangeRate src dst #

min :: ExchangeRate src dst -> ExchangeRate src dst -> ExchangeRate src dst #

(KnownSymbol src, KnownSymbol dst) => Read (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

(KnownSymbol src, KnownSymbol dst) => Show (ExchangeRate src dst) Source #
> show (exchangeRate (5 % 7) :: Maybe (ExchangeRate "USD" "JPY"))@
Just "ExchangeRate \"USD\" \"JPY\" 5%7"
Instance details

Defined in Money.Internal

Methods

showsPrec :: Int -> ExchangeRate src dst -> ShowS #

show :: ExchangeRate src dst -> String #

showList :: [ExchangeRate src dst] -> ShowS #

Generic (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

Associated Types

type Rep (ExchangeRate src dst) :: Type -> Type #

Methods

from :: ExchangeRate src dst -> Rep (ExchangeRate src dst) x #

to :: Rep (ExchangeRate src dst) x -> ExchangeRate src dst #

Arbitrary (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

Methods

arbitrary :: Gen (ExchangeRate src dst) #

shrink :: ExchangeRate src dst -> [ExchangeRate src dst] #

(KnownSymbol src, KnownSymbol dst) => Binary (ExchangeRate src dst) Source #

Compatible with SomeExchangeRate.

Instance details

Defined in Money.Internal

Methods

put :: ExchangeRate src dst -> Put #

get :: Get (ExchangeRate src dst) #

putList :: [ExchangeRate src dst] -> Put #

NFData (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

Methods

rnf :: ExchangeRate src dst -> () #

Hashable (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

Methods

hashWithSalt :: Int -> ExchangeRate src dst -> Int #

hash :: ExchangeRate src dst -> Int #

type Rep (ExchangeRate src dst) Source # 
Instance details

Defined in Money.Internal

type Rep (ExchangeRate src dst) = D1 (MetaData "ExchangeRate" "Money.Internal" "safe-money-0.7.1-1BcrJESs2d66OOiE9qkUxB" True) (C1 (MetaCons "ExchangeRate" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Rational)))

exchangeRate :: Rational -> Maybe (ExchangeRate src dst) Source #

Safely construct an ExchangeRate from a *positive* Rational number.

exchange :: ExchangeRate src dst -> Dense src -> Dense dst Source #

Apply the ExchangeRate to the given Dense src monetary value.

Identity law:

exchange (exchangeRateRecip x) . exchange x  ==  id

Use the Identity law for reasoning about going back and forth between src and dst in order to manage any leftovers that might not be representable as a Discrete monetary value of src.

exchangeRateRecip :: ExchangeRate a b -> ExchangeRate b a Source #

Reciprocal ExchangeRate.

This function retuns the reciprocal or multiplicative inverse of the given ExchangeRate, leading to the following identity law:

exchangeRateRecip . exchangeRateRecip   ==  id

Note: If ExchangeRate had a Fractional instance, then exchangeRateRecip would be the implementation of recip.

exchangeRateFromDecimal Source #

Arguments

:: Maybe Char

Thousands separator for the integer part, if any (i.e., the ',' in 1,234.56789).

-> Char

Decimal separator (i.e., the '.' in 1,234.56789)

-> Text

The raw string containing the decimal representation (e.g., "1,234.56789").

-> Maybe (ExchangeRate src dst) 

Parses a decimal representation of an ExchangeRate.

exchangeRateToDecimal Source #

Arguments

:: Approximation

Approximation to use if necesary in order to fit the Dense amount in as many decimal numbers as requested.

-> Maybe Char

Thousands separator for the integer part, if any (i.e., the ',' in 1,234.56789).

-> Char

Decimal separator (i.e., the '.' in 1,234.56789)

-> Word8

Number of decimal numbers to render, if any.

-> ExchangeRate src dst

The ExchangeRate to render.

-> Maybe Text

Returns Nothing if the given separators are not acceptable (i.e., they are digits, or they are equal).

Render a ExchangeRate as a decimal number in a potentially lossy manner.

> exchangeRateToDecimal Round True (Just ',') '.' 2
      =<< (exchangeRate (123456 % 100) :: Maybe (ExchangeRate "USD" "EUR"))
Just "1,234.56"

This function returns Nothing if it is not possible to reliably render the decimal string due to a bad choice of separators. That is, if the separators are digits or equal among themselves, this function returns Nothing.

exchangeRateToRational :: ExchangeRate src dst -> Rational Source #

Obtain a Rational representation of the ExchangeRate.

This Rational is guaranteed to be a positive number.

Serializable representations

data SomeDense Source #

A monomorphic representation of Dense that is easier to serialize and deserialize than Dense in case you don't know the type indexes involved.

If you are trying to construct a value of this type from some raw input, then you will need to use the mkSomeDense function.

In order to be able to effectively serialize a SomeDense value, you need to serialize the following three values (which are the eventual arguments to mkSomeDense):

Instances
Eq SomeDense Source # 
Instance details

Defined in Money.Internal

Ord SomeDense Source #

WARNING This instance does not compare monetary amounts, it just helps you sort SomeDense values in case you need to put them in a Set or similar.

Instance details

Defined in Money.Internal

Show SomeDense Source # 
Instance details

Defined in Money.Internal

Generic SomeDense Source # 
Instance details

Defined in Money.Internal

Associated Types

type Rep SomeDense :: Type -> Type #

Arbitrary SomeDense Source # 
Instance details

Defined in Money.Internal

Binary SomeDense Source #

Compatible with Dense.

Instance details

Defined in Money.Internal

NFData SomeDense Source # 
Instance details

Defined in Money.Internal

Methods

rnf :: SomeDense -> () #

Hashable SomeDense Source # 
Instance details

Defined in Money.Internal

type Rep SomeDense Source # 
Instance details

Defined in Money.Internal

type Rep SomeDense = D1 (MetaData "SomeDense" "Money.Internal" "safe-money-0.7.1-1BcrJESs2d66OOiE9qkUxB" False) (C1 (MetaCons "SomeDense" PrefixI True) (S1 (MetaSel (Just "_someDenseCurrency") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 String) :*: S1 (MetaSel (Just "_someDenseAmount") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Rational)))

toSomeDense :: KnownSymbol currency => Dense currency -> SomeDense Source #

Convert a Dense to a SomeDense for ease of serialization.

mkSomeDense Source #

Arguments

:: Text

Currency. (someDenseCurrency)

-> Rational

Scale. (someDenseAmount)

-> Maybe SomeDense 

Build a SomeDense from raw values.

This function is intended for deserialization purposes. You need to convert this SomeDense value to a Dense value in order to do any arithmetic operation on the monetary value.

fromSomeDense Source #

Arguments

:: KnownSymbol currency 
=> SomeDense 
-> Maybe (Dense currency) 

Attempt to convert a SomeDense to a Dense, provided you know the target currency.

withSomeDense Source #

Arguments

:: SomeDense 
-> (forall currency. KnownSymbol currency => Dense currency -> r) 
-> r 

Convert a SomeDense to a Dense without knowing the target currency.

Notice that currency here can't leave its intended scope unless you can prove equality with some other type at the outer scope, but in that case you would be better off using fromSomeDense directly.

someDenseAmount :: SomeDense -> Rational Source #

Currency unit amount.

data SomeDiscrete Source #

A monomorphic representation of Discrete that is easier to serialize and deserialize than Discrete in case you don't know the type indexes involved.

If you are trying to construct a value of this type from some raw input, then you will need to use the mkSomeDiscrete function.

In order to be able to effectively serialize a SomeDiscrete value, you need to serialize the following four values (which are the eventual arguments to mkSomeDiscrete):

Instances
Eq SomeDiscrete Source # 
Instance details

Defined in Money.Internal

Ord SomeDiscrete Source #

WARNING This instance does not compare monetary amounts, it just helps you sort SomeDiscrete values in case you need to put them in a Set or similar.

Instance details

Defined in Money.Internal

Show SomeDiscrete Source # 
Instance details

Defined in Money.Internal

Generic SomeDiscrete Source # 
Instance details

Defined in Money.Internal

Associated Types

type Rep SomeDiscrete :: Type -> Type #

Arbitrary SomeDiscrete Source # 
Instance details

Defined in Money.Internal

Binary SomeDiscrete Source #

Compatible with Discrete.

Instance details

Defined in Money.Internal

NFData SomeDiscrete Source # 
Instance details

Defined in Money.Internal

Methods

rnf :: SomeDiscrete -> () #

Hashable SomeDiscrete Source # 
Instance details

Defined in Money.Internal

type Rep SomeDiscrete Source # 
Instance details

Defined in Money.Internal

type Rep SomeDiscrete = D1 (MetaData "SomeDiscrete" "Money.Internal" "safe-money-0.7.1-1BcrJESs2d66OOiE9qkUxB" False) (C1 (MetaCons "SomeDiscrete" PrefixI True) (S1 (MetaSel (Just "_someDiscreteCurrency") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 String) :*: (S1 (MetaSel (Just "_someDiscreteScale") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Rational) :*: S1 (MetaSel (Just "_someDiscreteAmount") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Integer))))

toSomeDiscrete Source #

Arguments

:: (KnownSymbol currency, GoodScale scale) 
=> Discrete' currency scale 
-> SomeDiscrete 

Convert a Discrete to a SomeDiscrete for ease of serialization.

mkSomeDiscrete Source #

Arguments

:: Text

Currency name. (someDiscreteCurrency)

-> Rational

Scale. Positive, non-zero. (someDiscreteScale)

-> Integer

Amount of unit. (someDiscreteAmount)

-> Maybe SomeDiscrete 

Internal. Build a SomeDiscrete from raw values.

This function is intended for deserialization purposes. You need to convert this SomeDiscrete value to a Discrete vallue in order to do any arithmetic operation on the monetary value.

fromSomeDiscrete Source #

Arguments

:: (KnownSymbol currency, GoodScale scale) 
=> SomeDiscrete 
-> Maybe (Discrete' currency scale) 

Attempt to convert a SomeDiscrete to a Discrete, provided you know the target currency and unit.

withSomeDiscrete Source #

Arguments

:: SomeDiscrete 
-> (forall currency scale. (KnownSymbol currency, GoodScale scale) => Discrete' currency scale -> r) 
-> r 

Convert a SomeDiscrete to a Discrete without knowing the target currency and unit.

Notice that currency and unit here can't leave its intended scope unless you can prove equality with some other type at the outer scope, but in that case you would be better off using fromSomeDiscrete directly.

Notice that you may need to add an explicit type to the result of this function in order to keep the compiler happy.

someDiscreteAmount :: SomeDiscrete -> Integer Source #

Amount of currency unit.

data SomeExchangeRate Source #

A monomorphic representation of ExchangeRate that is easier to serialize and deserialize than ExchangeRate in case you don't know the type indexes involved.

If you are trying to construct a value of this type from some raw input, then you will need to use the mkSomeExchangeRate function.

In order to be able to effectively serialize an SomeExchangeRate value, you need to serialize the following four values (which are the eventual arguments to mkSomeExchangeRate):

Instances
Eq SomeExchangeRate Source # 
Instance details

Defined in Money.Internal

Ord SomeExchangeRate Source #

WARNING This instance does not compare monetary amounts, it just helps you sort SomeExchangeRate values in case you need to put them in a Set or similar.

Instance details

Defined in Money.Internal

Show SomeExchangeRate Source # 
Instance details

Defined in Money.Internal

Generic SomeExchangeRate Source # 
Instance details

Defined in Money.Internal

Associated Types

type Rep SomeExchangeRate :: Type -> Type #

Arbitrary SomeExchangeRate Source # 
Instance details

Defined in Money.Internal

Binary SomeExchangeRate Source #

Compatible with ExchangeRate.

Instance details

Defined in Money.Internal

NFData SomeExchangeRate Source # 
Instance details

Defined in Money.Internal

Methods

rnf :: SomeExchangeRate -> () #

Hashable SomeExchangeRate Source # 
Instance details

Defined in Money.Internal

type Rep SomeExchangeRate Source # 
Instance details

Defined in Money.Internal

type Rep SomeExchangeRate = D1 (MetaData "SomeExchangeRate" "Money.Internal" "safe-money-0.7.1-1BcrJESs2d66OOiE9qkUxB" False) (C1 (MetaCons "SomeExchangeRate" PrefixI True) (S1 (MetaSel (Just "_someExchangeRateSrcCurrency") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 String) :*: (S1 (MetaSel (Just "_someExchangeRateDstCurrency") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 String) :*: S1 (MetaSel (Just "_someExchangeRateRate") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Rational))))

toSomeExchangeRate Source #

Arguments

:: (KnownSymbol src, KnownSymbol dst) 
=> ExchangeRate src dst 
-> SomeExchangeRate 

Convert a ExchangeRate to a SomeDiscrete for ease of serialization.

mkSomeExchangeRate Source #

Arguments

:: Text

Source currency name. (someExchangeRateSrcCurrency)

-> Text

Destination currency name. (someExchangeRateDstCurrency)

-> Rational

Exchange rate . Positive, non-zero. (someExchangeRateRate)

-> Maybe SomeExchangeRate 

Internal. Build a SomeExchangeRate from raw values.

This function is intended for deserialization purposes. You need to convert this SomeExchangeRate value to a ExchangeRate value in order to do any arithmetic operation with the exchange rate.

fromSomeExchangeRate Source #

Arguments

:: (KnownSymbol src, KnownSymbol dst) 
=> SomeExchangeRate 
-> Maybe (ExchangeRate src dst) 

Attempt to convert a SomeExchangeRate to a ExchangeRate, provided you know the target src and dst types.

withSomeExchangeRate Source #

Arguments

:: SomeExchangeRate 
-> (forall src dst. (KnownSymbol src, KnownSymbol dst) => ExchangeRate src dst -> r) 
-> r 

Convert a SomeExchangeRate to a ExchangeRate without knowing the target currency and unit.

Notice that src and dst here can't leave its intended scope unless you can prove equality with some other type at the outer scope, but in that case you would be better off using fromSomeExchangeRate directly.

someExchangeRateDstCurrency :: SomeExchangeRate -> Text Source #

Destination currency name.

someExchangeRateRate :: SomeExchangeRate -> Rational Source #

Exchange rate. Positive, non-zero.

Misc

data Approximation Source #

Method for approximating a fractional number to an integer number.

Constructors

Round

Approximate x to the nearest integer, or to the nearest even integer if x is equidistant between two integers.

Floor

Approximate x to the nearest integer less than or equal to x.

Ceiling

Approximate x to the nearest integer greater than or equal to x.

Truncate

Approximate x to the nearest integer betwen 0 and x, inclusive.

Instances
Eq Approximation Source # 
Instance details

Defined in Money.Internal

Ord Approximation Source # 
Instance details

Defined in Money.Internal

Read Approximation Source # 
Instance details

Defined in Money.Internal

Show Approximation Source # 
Instance details

Defined in Money.Internal

Generic Approximation Source # 
Instance details

Defined in Money.Internal

Associated Types

type Rep Approximation :: Type -> Type #

Arbitrary Approximation Source # 
Instance details

Defined in Money.Internal

NFData Approximation Source # 
Instance details

Defined in Money.Internal

Methods

rnf :: Approximation -> () #

Hashable Approximation Source # 
Instance details

Defined in Money.Internal

type Rep Approximation Source # 
Instance details

Defined in Money.Internal

type Rep Approximation = D1 (MetaData "Approximation" "Money.Internal" "safe-money-0.7.1-1BcrJESs2d66OOiE9qkUxB" False) ((C1 (MetaCons "Round" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Floor" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "Ceiling" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Truncate" PrefixI False) (U1 :: Type -> Type)))