hasquant-0.5.0.2: QuantLib/Currency.chs
module QuantLib.Currency
(
MoneyConversionType(..)
, ExchangeRateType(..)
, Ccy(..)
, Currency
, currency
, currency'
, code
, fractionsPerUnit
, fractionSymbol
, code'
, symbol
, ExchangeRate
, exchangeRate
, rate
, exchangeRateType
, exchange
, chainExchangeRate
, addExchangeRate
, lookupExchangeRate
, clearExchangeRates
, moneyConversionType
, setMoneyConversionType
, moneyBaseCurrency
, setMoneyBaseCurrency
, convertToBaseCurrency
) where
import QuantLib.Internal
import QuantLib.Internal.Type
import QuantLib.Internal.Enum
import QuantLib.Time.Date(Day)
import Foreign.Marshal.Alloc(alloca)
#include "qlTypesC2HS.h"
#include "qlEnumC2HS.h"
#include "qlEnumObjects.h"
#include "ql.h"
{#pointer *Rounding as QlRounding foreign newtype nocode#}
{#enum MoneyConversionType{} deriving(Show, Eq)#}
{#enum ExchangeRateType{} deriving(Show, Eq)#}
{#enum Ccy{} deriving(Show, Eq)#}
{#pointer *Currency foreign -> CCurrency nocode#}
{#pointer *Rounding as QlRounding foreign -> CRounding nocode#}
{#pointer *ExchangeRate foreign -> CExchangeRate nocode#}
-- |Look up one of the built-in ISO 4217 currencies by its enum tag.
{#fun qlCurrency as currency{`Ccy',preErrorCheck-`String'errorCheck*-}->`Currency'peekCurrency*#}
-- |The currency's ISO 4217 three-letter code, e.g. \"USD\".
{#fun pure qlCurrencyCode as code{withCurrency*`Currency'}->`String'peekDynString*#}
-- |The number of fractional units (e.g. cents) in one unit of the currency.
{#fun pure qlCurrencyFractionsPerUnit as fractionsPerUnit{withCurrency*`Currency'}->`Int'#}
-- |The currency's fractional-unit symbol, e.g. \"¢\".
{#fun pure qlCurrencyFractionSymbol as fractionSymbol{withCurrency*`Currency'}->`String'#}
-- |The currency's ISO 4217 numeric code, e.g. 840 for USD.
{#fun pure qlCurrencyNumericCode as code'{withCurrency*`Currency'}->`Int'#}
-- |The currency's symbol, e.g. \"$\".
{#fun pure qlCurrencySymbol as symbol{withCurrency*`Currency'}->`String'#}
-- |Construct a custom currency from its name, codes, symbols, rounding convention and an
-- optional triangulation currency used for indirect exchange.
{#fun qlCreateCurrency as currency'{`String' -- ^name
,`String' -- ^code
,`Int' -- ^numericCode
,`String' -- ^symbol
,`String' -- ^fractionSymbol
,`Int' -- ^fractionsPerUnit
,withMaybeRounding*`Maybe Rounding'
,withMaybeCurrency*`Maybe Currency' -- ^triangulationCurrency
,preErrorCheck-`String'errorCheck*-}->`Currency'peekCurrency*#}
-- |Construct a Direct exchange rate: a unit of @source@ is worth @rate@ units of @target@.
{#fun qlExchangeRate as exchangeRate
{withCurrency*`Currency' -- ^source
,withCurrency*`Currency' -- ^target
,`Double' -- ^rate
}->`ExchangeRate'peekExchangeRate*#}
-- |The rate itself: a unit of the source currency is worth this many units of the target.
{#fun qlExchangeRateRate as rate{withExchangeRate*`ExchangeRate'}->`Double'#}
-- |Whether the rate was given directly or derived by chaining two other rates.
{#fun qlExchangeRateType_ as exchangeRateType{withExchangeRate*`ExchangeRate'}->`ExchangeRateType'#}
-- |Apply an exchange rate to a cash amount (a @(Double, Currency)@ pair, standing in for
-- QuantLib's @Money@), returning the converted amount as a pair in the other currency of the
-- rate. Throws if the given currency is on neither side of the rate.
{#fun qlExchangeRateExchange as exchange
{withExchangeRate*`ExchangeRate'
,withMoney*`(Double, Currency)'& -- ^amount
,alloca-`Currency'peekCurrencyPtr*
,preErrorCheck-`String'errorCheck*-
}->`Double'#}
-- |Combine two exchange rates sharing a common currency into a derived rate between their
-- other two currencies. Throws if the rates don't share a common currency.
{#fun qlExchangeRateChain as chainExchangeRate
{withExchangeRate*`ExchangeRate'
,withExchangeRate*`ExchangeRate'
,preErrorCheck-`String'errorCheck*-}->`ExchangeRate'peekExchangeRate*#}
-- |Register an exchange rate with the global exchange-rate repository, valid between the given
-- dates (inclusive). Use 'minDate'/'maxDate' for an always-valid rate.
{#fun qlExchangeRateManagerAdd as addExchangeRate
{withExchangeRate*`ExchangeRate', withDay*`Day', withDay*`Day'}->`()'#}
-- |Look up a (possibly derived) exchange rate between two currencies at a given date (or the
-- current evaluation date if 'Nothing'). Throws if no rate can be found. Pre-populated with a
-- set of known historical rates even before any 'addExchangeRate' call.
{#fun qlExchangeRateManagerLookup as lookupExchangeRate
{withCurrency*`Currency', withCurrency*`Currency'
,withMaybeDay*`Maybe Day', `ExchangeRateType'
,preErrorCheck-`String'errorCheck*-}->`ExchangeRate'peekExchangeRate*#}
-- |Reset the exchange-rate repository back to its built-in set of known historical rates,
-- discarding anything added via 'addExchangeRate'.
{#fun qlExchangeRateManagerClear as clearExchangeRates{}->`()'#}
-- |The global 'Money' arithmetic setting controlling how amounts in different currencies are
-- combined (no conversion, convert to the base currency, or convert automatically).
{#fun qlMoneySettingsConversionType as moneyConversionType{}->`MoneyConversionType'#}
-- |Set the global 'Money' arithmetic conversion setting.
{#fun qlMoneySettingsSetConversionType as setMoneyConversionType{`MoneyConversionType'}->`()'#}
-- |The global base currency used by 'MoneyConversionType' base-currency conversion, if set.
{#fun qlMoneySettingsBaseCurrency as moneyBaseCurrency{}->`Maybe Currency'peekMaybeCurrency*#}
-- |Set the global base currency used by 'MoneyConversionType' base-currency conversion.
{#fun qlMoneySettingsSetBaseCurrency as setMoneyBaseCurrency{withCurrency*`Currency'}->`()'#}
-- |Convert a cash amount to the configured base currency (via 'setMoneyBaseCurrency'), using
-- 'lookupExchangeRate' and rounding the result per the target currency's convention. Throws if
-- no base currency is set or no rate path exists.
{#fun qlConvertToBaseCurrency as convertToBaseCurrency
{withMoney*`(Double, Currency)'& -- ^amount
,alloca-`Currency'peekCurrencyPtr*
,preErrorCheck-`String'errorCheck*-
}->`Double'#}
-- vim: set ff=unix ts=8 sts=2 sw=2 et: