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


-- | A Haskell library for working with the BitX bitcoin exchange.
--   
--   Haskell bindings to the Luno (formerly BitX) REST API, as described
--   here: <a>https://www.luno.com/en/api</a>.
--   
--   Note that since this library interfaces directly with a financial API,
--   great care must be taken in its use. In particular, the author cannot
--   be held accountable for any financial losses as a result of
--   programming error, whether that error is in your code, the code of the
--   author of this library, or Luno's code. This is just common sense.
--   
--   If you need to make sure that nothing funny happens in the code, apart
--   from reading the source yourself, you should also perform a few test
--   transactions with very small denominations, as I will strive to do
--   every time before releasing a new version.
--   
--   For a very small usage example, see
--   <a>Network.Bitcoin.BitX.Public</a>.
@package bitx-bitcoin
@version 0.12.0.0


-- | The types used for the various BitX API calls.
module Network.Bitcoin.BitX.Types

-- | The state of a single market, identified by the currency pair. As
--   usual, the ask/sell price is the price of the last filled ask order,
--   and the bid/buy price is the price of the last filled bid order.
--   Necessarily <tt>bid &lt;= ask.</tt>
data Ticker
Ticker :: UTCTime -> Maybe Scientific -> Maybe Scientific -> Maybe Scientific -> Scientific -> CcyPair -> Ticker
[tickerTimestamp] :: Ticker -> UTCTime
[tickerBid] :: Ticker -> Maybe Scientific
[tickerAsk] :: Ticker -> Maybe Scientific
[tickerLastTrade] :: Ticker -> Maybe Scientific
[tickerRolling24HourVolume] :: Ticker -> Scientific
[tickerPair] :: Ticker -> CcyPair

-- | A currency pair
data CcyPair

-- | Bitcoin vs. ZAR
XBTZAR :: CcyPair

-- | Bitcoin vs. Malaysian Ringgit
XBTMYR :: CcyPair

-- | Bitcoin vs. Nigerian Naira
XBTNGN :: CcyPair

-- | Bitcoin vs. Indonesian Rupiah
XBTIDR :: CcyPair

-- | Ether vs. Bitcoin
ETHXBT :: CcyPair

-- | The current state of the publically accessible orderbook. Bid orders
--   are requests to buy, ask orders are requests to sell.
data Orderbook
Orderbook :: UTCTime -> [Bid] -> [Ask] -> Orderbook
[orderbookTimestamp] :: Orderbook -> UTCTime
[orderbookBids] :: Orderbook -> [Bid]
[orderbookAsks] :: Orderbook -> [Ask]

-- | A single placed order in the orderbook
data Order
Order :: Scientific -> Scientific -> Order
[orderVolume] :: Order -> Scientific
[orderPrice] :: Order -> Scientific

-- | Convenient type alias for a bid order
type Bid = Order

-- | Convenient type alias for an ask order
type Ask = Order
data Trade
Trade :: UTCTime -> Scientific -> Scientific -> Bool -> Trade
[tradeTimestamp] :: Trade -> UTCTime
[tradeVolume] :: Trade -> Scientific
[tradePrice] :: Trade -> Scientific
[tradeIsBuy] :: Trade -> Bool

-- | An auth type used by all private API calls, after authorisation.
data BitXAuth
BitXAuth :: Text -> Text -> BitXAuth
[bitXAuthId] :: BitXAuth -> Text
[bitXAuthSecret] :: BitXAuth -> Text

-- | <pre>
--   &gt;&gt;&gt; :set -XOverloadedStrings
--   
--   &gt;&gt;&gt; "id:secret" :: BitXAuth
--   BitXAuth {bitXAuthId = "id", bitXAuthSecret = "secret"}
--   
--   &gt;&gt;&gt; "id:se:cret" :: BitXAuth
--   BitXAuth {bitXAuthId = "id", bitXAuthSecret = "se:cret"}
--   </pre>
--   
--   A recently placed (private) order, containing a lot more information
--   than is available on the public order book.
data PrivateOrder
PrivateOrder :: Scientific -> Scientific -> UTCTime -> UTCTime -> UTCTime -> Scientific -> Scientific -> Scientific -> Scientific -> OrderID -> CcyPair -> RequestStatus -> OrderType -> PrivateOrder
[privateOrderBase] :: PrivateOrder -> Scientific
[privateOrderCounter] :: PrivateOrder -> Scientific
[privateOrderCreationTimestamp] :: PrivateOrder -> UTCTime
[privateOrderExpirationTimestamp] :: PrivateOrder -> UTCTime
[privateOrderCompletedTimestamp] :: PrivateOrder -> UTCTime
[privateOrderFeeBase] :: PrivateOrder -> Scientific
[privateOrderFeeCounter] :: PrivateOrder -> Scientific
[privateOrderLimitPrice] :: PrivateOrder -> Scientific
[privateOrderLimitVolume] :: PrivateOrder -> Scientific
[privateOrderId] :: PrivateOrder -> OrderID
[privateOrderPair] :: PrivateOrder -> CcyPair
[privateOrderState] :: PrivateOrder -> RequestStatus
[privateOrderOrderType] :: PrivateOrder -> OrderType
type OrderID = Text

-- | The type of a placed order.
data OrderType

-- | A request to sell
ASK :: OrderType

-- | A request to buy
BID :: OrderType

-- | The state of a (private) placed request -- either an order or a
--   withdrawal request.
data RequestStatus

-- | Not yet completed. An order will stay in <a>PENDING</a> state even as
--   it is partially filled, and will move to <a>COMPLETE</a> once it has
--   been completely filled.
PENDING :: RequestStatus

-- | Completed.
COMPLETE :: RequestStatus

-- | Cancelled. Note that an order cannot be in <a>CANCELLED</a> state,
--   since cancelling an order removes it from the orderbook.
CANCELLED :: RequestStatus

-- | A request to place an order.
data OrderRequest
OrderRequest :: CcyPair -> OrderType -> Scientific -> Scientific -> OrderRequest
[orderRequestPair] :: OrderRequest -> CcyPair
[orderRequestOrderType] :: OrderRequest -> OrderType
[orderRequestVolume] :: OrderRequest -> Scientific
[orderRequestPrice] :: OrderRequest -> Scientific
data MarketOrderRequest
MarketOrderRequest :: CcyPair -> OrderType -> Scientific -> MarketOrderRequest
[marketOrderRequestPair] :: MarketOrderRequest -> CcyPair
[marketOrderRequestOrderType] :: MarketOrderRequest -> OrderType
[marketOrderRequestVolume] :: MarketOrderRequest -> Scientific
type RequestSuccess = Bool

-- | A possible error which the BitX API might return, instead of returning
--   the requested data. Note that as yet there is no exhaustive list of
--   error codes available, so comparisons will have to be done via Text
--   comparisons (as opposed to typed pattern matching). Sorry...
data BitXError
BitXError :: Text -> Text -> BitXError
[bitXErrorError] :: BitXError -> Text
[bitXErrorErrorCode] :: BitXError -> Text
type AccountID = Text

-- | A trade-able asset. Essentially, a currency.
data Asset

-- | South African Rand
ZAR :: Asset

-- | Bitcoin
XBT :: Asset

-- | Malaysian Ringgit
MYR :: Asset

-- | Indonesian Rupiah
IDR :: Asset

-- | Bitcoin Cash
BCH :: Asset

-- | Ether
ETH :: Asset

-- | The current balance of a private account.
data Balance
Balance :: AccountID -> Asset -> Scientific -> Scientific -> Scientific -> Balance
[balanceId] :: Balance -> AccountID
[balanceAsset] :: Balance -> Asset
[balanceBalance] :: Balance -> Scientific
[balanceReserved] :: Balance -> Scientific
[balanceUnconfirmed] :: Balance -> Scientific

-- | A registered address for an acocunt.
data FundingAddress
FundingAddress :: Asset -> Text -> Scientific -> Scientific -> FundingAddress
[fundingAddressAsset] :: FundingAddress -> Asset
[fundingAddressAddress] :: FundingAddress -> Text
[fundingAddressTotalReceived] :: FundingAddress -> Scientific
[fundingAddressTotalUnconfirmed] :: FundingAddress -> Scientific

-- | The state of a request to withdraw from an account.
data WithdrawalRequest
WithdrawalRequest :: RequestStatus -> Text -> WithdrawalRequest
[withdrawalRequestStatus] :: WithdrawalRequest -> RequestStatus
[withdrawalRequestId] :: WithdrawalRequest -> Text

-- | A request to withdraw from an account.
data NewWithdrawal
NewWithdrawal :: WithdrawalType -> Scientific -> Maybe Text -> NewWithdrawal
[newWithdrawalWithdrawalType] :: NewWithdrawal -> WithdrawalType
[newWithdrawalAmount] :: NewWithdrawal -> Scientific
[newWithdrawalBeneficiaryId] :: NewWithdrawal -> Maybe Text

-- | The type of a withdrawal request.
data WithdrawalType

-- | ZAR by Electronic Funds Transfer
ZAR_EFT :: WithdrawalType

-- | Namibian Dollar by EFT
NAD_EFT :: WithdrawalType

-- | Kenyan Shilling by Vodafone MPESA
KES_MPESA :: WithdrawalType

-- | Malaysian Ringgit by Interbank GIRO (?)
MYR_IBG :: WithdrawalType

-- | Indonesian Rupiah by Lalu Lintas Giro (??)
IDR_LLG :: WithdrawalType

-- | A request to send bitcoin to a bitcoin address or email address.
data BitcoinSendRequest
BitcoinSendRequest :: Scientific -> Asset -> Text -> Maybe Text -> Maybe Text -> BitcoinSendRequest
[bitcoinSendRequestAmount] :: BitcoinSendRequest -> Scientific
[bitcoinSendRequestCurrency] :: BitcoinSendRequest -> Asset
[bitcoinSendRequestAddress] :: BitcoinSendRequest -> Text
[bitcoinSendRequestDescription] :: BitcoinSendRequest -> Maybe Text
[bitcoinSendRequestMessage] :: BitcoinSendRequest -> Maybe Text

-- | A request to lock in a quote.
data QuoteRequest
QuoteRequest :: QuoteType -> CcyPair -> Scientific -> QuoteRequest
[quoteRequestQuoteType] :: QuoteRequest -> QuoteType
[quoteRequestPair] :: QuoteRequest -> CcyPair
[quoteRequestBaseAmount] :: QuoteRequest -> Scientific

-- | A temporarily locked-in quote.
data OrderQuote
OrderQuote :: Text -> QuoteType -> CcyPair -> Scientific -> Scientific -> UTCTime -> UTCTime -> Bool -> Bool -> OrderQuote
[orderQuoteId] :: OrderQuote -> Text
[orderQuoteQuoteType] :: OrderQuote -> QuoteType
[orderQuotePair] :: OrderQuote -> CcyPair
[orderQuoteBaseAmount] :: OrderQuote -> Scientific
[orderQuoteCounterAmount] :: OrderQuote -> Scientific
[orderQuoteCreatedAt] :: OrderQuote -> UTCTime
[orderQuoteExpiresAt] :: OrderQuote -> UTCTime
[orderQuoteDiscarded] :: OrderQuote -> Bool
[orderQuoteExercised] :: OrderQuote -> Bool
data QuoteType
BUY :: QuoteType
SELL :: QuoteType
type BitXClientAuth = BitXAuth

-- | A transaction on a private user account.
data Transaction
Transaction :: Int -> UTCTime -> Scientific -> Scientific -> Scientific -> Scientific -> Asset -> Text -> Transaction
[transactionRowIndex] :: Transaction -> Int
[transactionTimestamp] :: Transaction -> UTCTime
[transactionBalance] :: Transaction -> Scientific
[transactionAvailable] :: Transaction -> Scientific
[transactionBalanceDelta] :: Transaction -> Scientific
[transactionAvailableDelta] :: Transaction -> Scientific
[transactionCurrency] :: Transaction -> Asset
[transactionDescription] :: Transaction -> Text

-- | A registered account.
data Account
Account :: Text -> Text -> Asset -> Account
[accountId] :: Account -> Text
[accountName] :: Account -> Text
[accountCurrency] :: Account -> Asset

-- | A private trade, containing a lot more information than is avaiable
--   when inspecting trades via the public API.
data PrivateTrade
PrivateTrade :: Scientific -> Scientific -> Scientific -> Scientific -> Bool -> Text -> CcyPair -> Scientific -> UTCTime -> OrderType -> Scientific -> PrivateTrade
[privateTradeBase] :: PrivateTrade -> Scientific
[privateTradeCounter] :: PrivateTrade -> Scientific
[privateTradeFeeBase] :: PrivateTrade -> Scientific
[privateTradeFeeCounter] :: PrivateTrade -> Scientific
[privateTradeIsBuy] :: PrivateTrade -> Bool
[privateTradeOrderId] :: PrivateTrade -> Text
[privateTradePair] :: PrivateTrade -> CcyPair
[privateTradePrice] :: PrivateTrade -> Scientific
[privateTradeTimestamp] :: PrivateTrade -> UTCTime
[privateTradeOrderType] :: PrivateTrade -> OrderType
[privateTradeVolume] :: PrivateTrade -> Scientific

-- | Fee information
data FeeInfo
FeeInfo :: Scientific -> Scientific -> Scientific -> FeeInfo
[feeInfoMakerFee] :: FeeInfo -> Scientific
[feeInfoTakerFee] :: FeeInfo -> Scientific
[feeInfoThirtyDayVolume] :: FeeInfo -> Scientific

-- | <pre>
--   mkBitXAuth = BitXAuth "" ""
--   </pre>
mkBitXAuth :: BitXAuth

-- | <pre>
--   mkAccount = Account "" "" ZAR
--   </pre>
mkAccount :: Account

-- | <pre>
--   mkBitcoinSendRequest = BitcoinSendRequest 0 ZAR "" Nothing Nothing
--   </pre>
mkBitcoinSendRequest :: BitcoinSendRequest

-- | <pre>
--   mkOrderRequest = OrderRequest XBTZAR BID 0 0
--   </pre>
mkOrderRequest :: OrderRequest

-- | <pre>
--   mkQuoteRequest = QuoteRequest BUY XBTZAR 0
--   </pre>
mkQuoteRequest :: QuoteRequest

-- | <pre>
--   mkNewWithdrawal = NewWithdrawal ZAR_EFT 0
--   </pre>
mkNewWithdrawal :: NewWithdrawal

-- | <pre>
--   mkMarketOrderRequest = MarketOrderRequest XBTZAR BID 0
--   </pre>
mkMarketOrderRequest :: MarketOrderRequest
class HasError s a | s -> a
error :: HasError s a => Lens' s a
class HasErrorCode s a | s -> a
errorCode :: HasErrorCode s a => Lens' s a
class HasTimestamp s a | s -> a
timestamp :: HasTimestamp s a => Lens' s a
class HasBid s a | s -> a
bid :: HasBid s a => Lens' s a
class HasAsk s a | s -> a
ask :: HasAsk s a => Lens' s a
class HasLastTrade s a | s -> a
lastTrade :: HasLastTrade s a => Lens' s a
class HasRolling24HourVolume s a | s -> a
rolling24HourVolume :: HasRolling24HourVolume s a => Lens' s a
class HasPair s a | s -> a
pair :: HasPair s a => Lens' s a
class HasVolume s a | s -> a
volume :: HasVolume s a => Lens' s a
class HasPrice s a | s -> a
price :: HasPrice s a => Lens' s a
class HasBids s a | s -> a
bids :: HasBids s a => Lens' s a
class HasAsks s a | s -> a
asks :: HasAsks s a => Lens' s a
class HasSecret s a | s -> a
secret :: HasSecret s a => Lens' s a
class HasId s a | s -> a
id :: HasId s a => Lens' s a
class HasBase s a | s -> a
base :: HasBase s a => Lens' s a
class HasCounter s a | s -> a
counter :: HasCounter s a => Lens' s a
class HasCreationTimestamp s a | s -> a
creationTimestamp :: HasCreationTimestamp s a => Lens' s a
class HasExpirationTimestamp s a | s -> a
expirationTimestamp :: HasExpirationTimestamp s a => Lens' s a
class HasCompletedTimestamp s a | s -> a
completedTimestamp :: HasCompletedTimestamp s a => Lens' s a
class HasFeeBase s a | s -> a
feeBase :: HasFeeBase s a => Lens' s a
class HasFeeCounter s a | s -> a
feeCounter :: HasFeeCounter s a => Lens' s a
class HasLimitPrice s a | s -> a
limitPrice :: HasLimitPrice s a => Lens' s a
class HasState s a | s -> a
state :: HasState s a => Lens' s a
class HasOrderType s a | s -> a
orderType :: HasOrderType s a => Lens' s a
class HasLimitVolume s a | s -> a
limitVolume :: HasLimitVolume s a => Lens' s a
class HasRowIndex s a | s -> a
rowIndex :: HasRowIndex s a => Lens' s a
class HasBalance s a | s -> a
balance :: HasBalance s a => Lens' s a
class HasAvailable s a | s -> a
available :: HasAvailable s a => Lens' s a
class HasBalanceDelta s a | s -> a
balanceDelta :: HasBalanceDelta s a => Lens' s a
class HasAvailableDelta s a | s -> a
availableDelta :: HasAvailableDelta s a => Lens' s a
class HasCurrency s a | s -> a
currency :: HasCurrency s a => Lens' s a
class HasDescription s a | s -> a
description :: HasDescription s a => Lens' s a
class HasAsset s a | s -> a
asset :: HasAsset s a => Lens' s a
class HasReserved s a | s -> a
reserved :: HasReserved s a => Lens' s a
class HasUnconfirmed s a | s -> a
unconfirmed :: HasUnconfirmed s a => Lens' s a
class HasAddress s a | s -> a
address :: HasAddress s a => Lens' s a
class HasTotalReceived s a | s -> a
totalReceived :: HasTotalReceived s a => Lens' s a
class HasTotalUnconfirmed s a | s -> a
totalUnconfirmed :: HasTotalUnconfirmed s a => Lens' s a
class HasAmount s a | s -> a
amount :: HasAmount s a => Lens' s a
class HasWithdrawalType s a | s -> a
withdrawalType :: HasWithdrawalType s a => Lens' s a
class HasMessage s a | s -> a
message :: HasMessage s a => Lens' s a
class HasQuoteType s a | s -> a
quoteType :: HasQuoteType s a => Lens' s a
class HasBaseAmount s a | s -> a
baseAmount :: HasBaseAmount s a => Lens' s a
class HasCounterAmount s a | s -> a
counterAmount :: HasCounterAmount s a => Lens' s a
class HasCreatedAt s a | s -> a
createdAt :: HasCreatedAt s a => Lens' s a
class HasExpiresAt s a | s -> a
expiresAt :: HasExpiresAt s a => Lens' s a
class HasDiscarded s a | s -> a
discarded :: HasDiscarded s a => Lens' s a
class HasExercised s a | s -> a
exercised :: HasExercised s a => Lens' s a
class HasName s a | s -> a
name :: HasName s a => Lens' s a
class HasIsBuy s a | s -> a
isBuy :: HasIsBuy s a => Lens' s a
class HasStatus s a | s -> a
status :: HasStatus s a => Lens' s a
class HasBeneficiaryId s a | s -> a
beneficiaryId :: HasBeneficiaryId s a => Lens' s a
class HasOrderId s a | s -> a
orderId :: HasOrderId s a => Lens' s a
class HasMakerFee s a | s -> a
makerFee :: HasMakerFee s a => Lens' s a
class HasTakerFee s a | s -> a
takerFee :: HasTakerFee s a => Lens' s a
class HasThirtyDayVolume s a | s -> a
thirtyDayVolume :: HasThirtyDayVolume s a => Lens' s a
instance Network.Bitcoin.BitX.Types.HasThirtyDayVolume Network.Bitcoin.BitX.Types.FeeInfo Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasTakerFee Network.Bitcoin.BitX.Types.FeeInfo Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasMakerFee Network.Bitcoin.BitX.Types.FeeInfo Data.Scientific.Scientific
instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.CcyPair
instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.Asset
instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.OrderType
instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.WithdrawalType
instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.QuoteType
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.FeeInfo
instance Data.Data.Data Network.Bitcoin.BitX.Types.FeeInfo
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.FeeInfo
instance GHC.Show.Show Network.Bitcoin.BitX.Types.FeeInfo
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.FeeInfo
instance Network.Bitcoin.BitX.Types.HasOrderId Network.Bitcoin.BitX.Types.PrivateTrade Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasBase Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasCounter Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasFeeBase Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasFeeCounter Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasIsBuy Network.Bitcoin.BitX.Types.PrivateTrade GHC.Types.Bool
instance Network.Bitcoin.BitX.Types.HasOrderType Network.Bitcoin.BitX.Types.PrivateTrade Network.Bitcoin.BitX.Types.OrderType
instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.PrivateTrade Network.Bitcoin.BitX.Types.CcyPair
instance Network.Bitcoin.BitX.Types.HasPrice Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasTimestamp Network.Bitcoin.BitX.Types.PrivateTrade Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasVolume Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.PrivateTrade
instance Data.Data.Data Network.Bitcoin.BitX.Types.PrivateTrade
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.PrivateTrade
instance GHC.Show.Show Network.Bitcoin.BitX.Types.PrivateTrade
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.PrivateTrade
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.PrivateTrade
instance Network.Bitcoin.BitX.Types.HasName Network.Bitcoin.BitX.Types.Account Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasCurrency Network.Bitcoin.BitX.Types.Account Network.Bitcoin.BitX.Types.Asset
instance Network.Bitcoin.BitX.Types.HasId Network.Bitcoin.BitX.Types.Account Data.Text.Internal.Text
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Account
instance Data.Data.Data Network.Bitcoin.BitX.Types.Account
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Account
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Account
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Account
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Account
instance Network.Bitcoin.BitX.Types.HasExpiresAt Network.Bitcoin.BitX.Types.OrderQuote Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasExercised Network.Bitcoin.BitX.Types.OrderQuote GHC.Types.Bool
instance Network.Bitcoin.BitX.Types.HasDiscarded Network.Bitcoin.BitX.Types.OrderQuote GHC.Types.Bool
instance Network.Bitcoin.BitX.Types.HasCreatedAt Network.Bitcoin.BitX.Types.OrderQuote Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasCounterAmount Network.Bitcoin.BitX.Types.OrderQuote Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasBaseAmount Network.Bitcoin.BitX.Types.OrderQuote Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasId Network.Bitcoin.BitX.Types.OrderQuote Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.OrderQuote Network.Bitcoin.BitX.Types.CcyPair
instance Network.Bitcoin.BitX.Types.HasQuoteType Network.Bitcoin.BitX.Types.OrderQuote Network.Bitcoin.BitX.Types.QuoteType
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.OrderQuote
instance Data.Data.Data Network.Bitcoin.BitX.Types.OrderQuote
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.OrderQuote
instance GHC.Show.Show Network.Bitcoin.BitX.Types.OrderQuote
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.OrderQuote
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.OrderQuote
instance Network.Bitcoin.BitX.Types.HasQuoteType Network.Bitcoin.BitX.Types.QuoteRequest Network.Bitcoin.BitX.Types.QuoteType
instance Network.Bitcoin.BitX.Types.HasBaseAmount Network.Bitcoin.BitX.Types.QuoteRequest Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.QuoteRequest Network.Bitcoin.BitX.Types.CcyPair
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.QuoteRequest
instance Data.Data.Data Network.Bitcoin.BitX.Types.QuoteRequest
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.QuoteRequest
instance GHC.Show.Show Network.Bitcoin.BitX.Types.QuoteRequest
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.QuoteRequest
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.QuoteRequest
instance Network.Bitcoin.BitX.Types.HasMessage Network.Bitcoin.BitX.Types.BitcoinSendRequest (GHC.Base.Maybe Data.Text.Internal.Text)
instance Network.Bitcoin.BitX.Types.HasAddress Network.Bitcoin.BitX.Types.BitcoinSendRequest Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasAmount Network.Bitcoin.BitX.Types.BitcoinSendRequest Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasCurrency Network.Bitcoin.BitX.Types.BitcoinSendRequest Network.Bitcoin.BitX.Types.Asset
instance Network.Bitcoin.BitX.Types.HasDescription Network.Bitcoin.BitX.Types.BitcoinSendRequest (GHC.Base.Maybe Data.Text.Internal.Text)
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.BitcoinSendRequest
instance Data.Data.Data Network.Bitcoin.BitX.Types.BitcoinSendRequest
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.BitcoinSendRequest
instance GHC.Show.Show Network.Bitcoin.BitX.Types.BitcoinSendRequest
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.BitcoinSendRequest
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.BitcoinSendRequest
instance Network.Bitcoin.BitX.Types.HasWithdrawalType Network.Bitcoin.BitX.Types.NewWithdrawal Network.Bitcoin.BitX.Types.WithdrawalType
instance Network.Bitcoin.BitX.Types.HasBeneficiaryId Network.Bitcoin.BitX.Types.NewWithdrawal (GHC.Base.Maybe Data.Text.Internal.Text)
instance Network.Bitcoin.BitX.Types.HasAmount Network.Bitcoin.BitX.Types.NewWithdrawal Data.Scientific.Scientific
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.NewWithdrawal
instance Data.Data.Data Network.Bitcoin.BitX.Types.NewWithdrawal
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.NewWithdrawal
instance GHC.Show.Show Network.Bitcoin.BitX.Types.NewWithdrawal
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.NewWithdrawal
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.NewWithdrawal
instance Network.Bitcoin.BitX.Types.HasStatus Network.Bitcoin.BitX.Types.WithdrawalRequest Network.Bitcoin.BitX.Types.RequestStatus
instance Network.Bitcoin.BitX.Types.HasId Network.Bitcoin.BitX.Types.WithdrawalRequest Data.Text.Internal.Text
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.WithdrawalRequest
instance Data.Data.Data Network.Bitcoin.BitX.Types.WithdrawalRequest
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.WithdrawalRequest
instance GHC.Show.Show Network.Bitcoin.BitX.Types.WithdrawalRequest
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.WithdrawalRequest
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.WithdrawalRequest
instance Network.Bitcoin.BitX.Types.HasTotalUnconfirmed Network.Bitcoin.BitX.Types.FundingAddress Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasTotalReceived Network.Bitcoin.BitX.Types.FundingAddress Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasAddress Network.Bitcoin.BitX.Types.FundingAddress Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasAsset Network.Bitcoin.BitX.Types.FundingAddress Network.Bitcoin.BitX.Types.Asset
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.FundingAddress
instance Data.Data.Data Network.Bitcoin.BitX.Types.FundingAddress
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.FundingAddress
instance GHC.Show.Show Network.Bitcoin.BitX.Types.FundingAddress
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.FundingAddress
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.FundingAddress
instance Network.Bitcoin.BitX.Types.HasUnconfirmed Network.Bitcoin.BitX.Types.Balance Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasReserved Network.Bitcoin.BitX.Types.Balance Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasAsset Network.Bitcoin.BitX.Types.Balance Network.Bitcoin.BitX.Types.Asset
instance Network.Bitcoin.BitX.Types.HasBalance Network.Bitcoin.BitX.Types.Balance Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasId Network.Bitcoin.BitX.Types.Balance Network.Bitcoin.BitX.Types.AccountID
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Balance
instance Data.Data.Data Network.Bitcoin.BitX.Types.Balance
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Balance
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Balance
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Balance
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Balance
instance Network.Bitcoin.BitX.Types.HasOrderType Network.Bitcoin.BitX.Types.MarketOrderRequest Network.Bitcoin.BitX.Types.OrderType
instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.MarketOrderRequest Network.Bitcoin.BitX.Types.CcyPair
instance Network.Bitcoin.BitX.Types.HasVolume Network.Bitcoin.BitX.Types.MarketOrderRequest Data.Scientific.Scientific
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.MarketOrderRequest
instance Data.Data.Data Network.Bitcoin.BitX.Types.MarketOrderRequest
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.MarketOrderRequest
instance GHC.Show.Show Network.Bitcoin.BitX.Types.MarketOrderRequest
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.MarketOrderRequest
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.MarketOrderRequest
instance Network.Bitcoin.BitX.Types.HasOrderType Network.Bitcoin.BitX.Types.OrderRequest Network.Bitcoin.BitX.Types.OrderType
instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.OrderRequest Network.Bitcoin.BitX.Types.CcyPair
instance Network.Bitcoin.BitX.Types.HasPrice Network.Bitcoin.BitX.Types.OrderRequest Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasVolume Network.Bitcoin.BitX.Types.OrderRequest Data.Scientific.Scientific
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.OrderRequest
instance Data.Data.Data Network.Bitcoin.BitX.Types.OrderRequest
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.OrderRequest
instance GHC.Show.Show Network.Bitcoin.BitX.Types.OrderRequest
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.OrderRequest
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.OrderRequest
instance Network.Bitcoin.BitX.Types.HasRowIndex Network.Bitcoin.BitX.Types.Transaction GHC.Types.Int
instance Network.Bitcoin.BitX.Types.HasDescription Network.Bitcoin.BitX.Types.Transaction Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasCurrency Network.Bitcoin.BitX.Types.Transaction Network.Bitcoin.BitX.Types.Asset
instance Network.Bitcoin.BitX.Types.HasBalanceDelta Network.Bitcoin.BitX.Types.Transaction Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasBalance Network.Bitcoin.BitX.Types.Transaction Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasAvailableDelta Network.Bitcoin.BitX.Types.Transaction Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasAvailable Network.Bitcoin.BitX.Types.Transaction Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasTimestamp Network.Bitcoin.BitX.Types.Transaction Data.Time.Clock.Internal.UTCTime.UTCTime
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Transaction
instance Data.Data.Data Network.Bitcoin.BitX.Types.Transaction
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Transaction
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Transaction
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Transaction
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Transaction
instance Network.Bitcoin.BitX.Types.HasState Network.Bitcoin.BitX.Types.PrivateOrder Network.Bitcoin.BitX.Types.RequestStatus
instance Network.Bitcoin.BitX.Types.HasOrderType Network.Bitcoin.BitX.Types.PrivateOrder Network.Bitcoin.BitX.Types.OrderType
instance Network.Bitcoin.BitX.Types.HasLimitVolume Network.Bitcoin.BitX.Types.PrivateOrder Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasLimitPrice Network.Bitcoin.BitX.Types.PrivateOrder Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasFeeCounter Network.Bitcoin.BitX.Types.PrivateOrder Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasFeeBase Network.Bitcoin.BitX.Types.PrivateOrder Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasExpirationTimestamp Network.Bitcoin.BitX.Types.PrivateOrder Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasCreationTimestamp Network.Bitcoin.BitX.Types.PrivateOrder Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasCounter Network.Bitcoin.BitX.Types.PrivateOrder Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasCompletedTimestamp Network.Bitcoin.BitX.Types.PrivateOrder Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasBase Network.Bitcoin.BitX.Types.PrivateOrder Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasId Network.Bitcoin.BitX.Types.PrivateOrder Network.Bitcoin.BitX.Types.OrderID
instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.PrivateOrder Network.Bitcoin.BitX.Types.CcyPair
instance Data.Data.Data Network.Bitcoin.BitX.Types.PrivateOrder
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.PrivateOrder
instance GHC.Show.Show Network.Bitcoin.BitX.Types.PrivateOrder
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.PrivateOrder
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.PrivateOrder
instance Network.Bitcoin.BitX.Types.HasSecret Network.Bitcoin.BitX.Types.BitXAuth Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasId Network.Bitcoin.BitX.Types.BitXAuth Data.Text.Internal.Text
instance Data.String.IsString Network.Bitcoin.BitX.Types.BitXAuth
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.BitXAuth
instance Data.Data.Data Network.Bitcoin.BitX.Types.BitXAuth
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.BitXAuth
instance GHC.Show.Show Network.Bitcoin.BitX.Types.BitXAuth
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.BitXAuth
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.BitXAuth
instance Network.Bitcoin.BitX.Types.HasIsBuy Network.Bitcoin.BitX.Types.Trade GHC.Types.Bool
instance Network.Bitcoin.BitX.Types.HasPrice Network.Bitcoin.BitX.Types.Trade Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasTimestamp Network.Bitcoin.BitX.Types.Trade Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasVolume Network.Bitcoin.BitX.Types.Trade Data.Scientific.Scientific
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Trade
instance Data.Data.Data Network.Bitcoin.BitX.Types.Trade
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Trade
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Trade
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Trade
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Trade
instance Network.Bitcoin.BitX.Types.HasBids Network.Bitcoin.BitX.Types.Orderbook [Network.Bitcoin.BitX.Types.Bid]
instance Network.Bitcoin.BitX.Types.HasAsks Network.Bitcoin.BitX.Types.Orderbook [Network.Bitcoin.BitX.Types.Ask]
instance Network.Bitcoin.BitX.Types.HasTimestamp Network.Bitcoin.BitX.Types.Orderbook Data.Time.Clock.Internal.UTCTime.UTCTime
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Orderbook
instance Data.Data.Data Network.Bitcoin.BitX.Types.Orderbook
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Orderbook
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Orderbook
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Orderbook
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Orderbook
instance Network.Bitcoin.BitX.Types.HasVolume Network.Bitcoin.BitX.Types.Order Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasPrice Network.Bitcoin.BitX.Types.Order Data.Scientific.Scientific
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Order
instance Data.Data.Data Network.Bitcoin.BitX.Types.Order
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Order
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Order
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Order
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.QuoteType
instance Data.Data.Data Network.Bitcoin.BitX.Types.QuoteType
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.QuoteType
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.QuoteType
instance GHC.Show.Show Network.Bitcoin.BitX.Types.QuoteType
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.WithdrawalType
instance Data.Data.Data Network.Bitcoin.BitX.Types.WithdrawalType
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.WithdrawalType
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.WithdrawalType
instance GHC.Show.Show Network.Bitcoin.BitX.Types.WithdrawalType
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Asset
instance Data.Data.Data Network.Bitcoin.BitX.Types.Asset
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Asset
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Asset
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Asset
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Order
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.QuoteType
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.WithdrawalType
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Asset
instance Network.Bitcoin.BitX.Types.HasTimestamp Network.Bitcoin.BitX.Types.Ticker Data.Time.Clock.Internal.UTCTime.UTCTime
instance Network.Bitcoin.BitX.Types.HasRolling24HourVolume Network.Bitcoin.BitX.Types.Ticker Data.Scientific.Scientific
instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.Ticker Network.Bitcoin.BitX.Types.CcyPair
instance Network.Bitcoin.BitX.Types.HasLastTrade Network.Bitcoin.BitX.Types.Ticker (GHC.Base.Maybe Data.Scientific.Scientific)
instance Network.Bitcoin.BitX.Types.HasBid Network.Bitcoin.BitX.Types.Ticker (GHC.Base.Maybe Data.Scientific.Scientific)
instance Network.Bitcoin.BitX.Types.HasAsk Network.Bitcoin.BitX.Types.Ticker (GHC.Base.Maybe Data.Scientific.Scientific)
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Ticker
instance Data.Data.Data Network.Bitcoin.BitX.Types.Ticker
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Ticker
instance GHC.Show.Show Network.Bitcoin.BitX.Types.Ticker
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.Ticker
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.CcyPair
instance Data.Data.Data Network.Bitcoin.BitX.Types.CcyPair
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.CcyPair
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.CcyPair
instance GHC.Show.Show Network.Bitcoin.BitX.Types.CcyPair
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Ticker
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.CcyPair
instance Network.Bitcoin.BitX.Types.HasErrorCode Network.Bitcoin.BitX.Types.BitXError Data.Text.Internal.Text
instance Network.Bitcoin.BitX.Types.HasError Network.Bitcoin.BitX.Types.BitXError Data.Text.Internal.Text
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.BitXError
instance Data.Data.Data Network.Bitcoin.BitX.Types.BitXError
instance GHC.Show.Show Network.Bitcoin.BitX.Types.BitXError
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.BitXError
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.BitXError
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.RequestStatus
instance Data.Data.Data Network.Bitcoin.BitX.Types.RequestStatus
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.RequestStatus
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.RequestStatus
instance GHC.Show.Show Network.Bitcoin.BitX.Types.RequestStatus
instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.OrderType
instance Data.Data.Data Network.Bitcoin.BitX.Types.OrderType
instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.OrderType
instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.OrderType
instance GHC.Show.Show Network.Bitcoin.BitX.Types.OrderType
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.BitXError
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.RequestStatus
instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.OrderType


-- | The common return type of the API.
module Network.Bitcoin.BitX.Response

-- | This retun type enumerates all possible failure modes.
data BitXAPIResponse recd

-- | Some exception occured while making the call to BitX.
ExceptionResponse :: HttpException -> BitXAPIResponse recd

-- | BitX returned an error record instead of returning the data we were
--   expecting.
ErrorResponse :: BitXError -> BitXAPIResponse recd

-- | We received the data type we were expecting.
ValidResponse :: recd -> BitXAPIResponse recd

-- | BitX retuned data which couldn't be parsed, such as some text which
--   was probably not JSON format. The first value is the error given by
--   Aeson upon trying to parse the response body.
UnparseableResponse :: Text -> (Response Text) -> BitXAPIResponse recd
instance GHC.Show.Show recd => GHC.Show.Show (Network.Bitcoin.BitX.Response.BitXAPIResponse recd)


-- | <h1>Usage example</h1>
--   
--   As a small example, to get the current selling price of bitcoin on the
--   BitX exchange, do the following:
--   
--   <pre>
--   import Control.Lens ((^.))
--   import Network.Bitcoin.BitX (BitXAPIResponse(..), getTicker, CcyPair(..))
--   import qualified Network.Bitcoin.BitX as BitX
--   import Data.Text (unpack)
--   import Network.HTTP.Types.Status (Status(..))
--   import Network.HTTP.Client (responseStatus)
--   
--   main :: IO ()
--   main = do
--     bitXResponse &lt;- getTicker XBTZAR
--     case bitXResponse of
--       ValidResponse tic
--         case tic ^. BitX.ask of
--           Nothing              -&gt;  putStrLn "The BTC-ZAR exchange not currently have an ask price..."
--           Just p               -&gt;  putStrLn ("1 bitcoin will set you back ZAR" ++ show p ++ ".00.")
--       ErrorResponse err        -&gt;
--           error $ "BitX error received: \"" ++ unpack (err ^. BitX.error) ++ "\""
--       ExceptionResponse ex     -&gt;
--           error $ "Exception was thrown: \"" ++ show ex ++ "\""
--       UnparseableResponse _ resp -&gt;
--           error $ "Bad HTTP response; HTTP status code was: \"" ++ (show . statusCode . responseStatus $ resp) ++ "\""
--    
--   </pre>
module Network.Bitcoin.BitX.Public

-- | Returns the latest ticker indicators.
getTicker :: CcyPair -> IO (BitXAPIResponse Ticker)

-- | Returns the latest ticker indicators from all active BitX exchanges.
getTickers :: IO (BitXAPIResponse [Ticker])

-- | Returns a list of bids and asks in the order book.
--   
--   Ask orders are sorted by price ascending. Bid orders are sorted by
--   price descending. Note that multiple orders at the same price are not
--   necessarily conflated.
getOrderBook :: CcyPair -> IO (BitXAPIResponse Orderbook)

-- | Returns a list of the most recent trades
getTrades :: Maybe UTCTime -> CcyPair -> IO (BitXAPIResponse [Trade])


module Network.Bitcoin.BitX.Private.Withdrawal

-- | List withdrawal requests
--   
--   Returns a list of withdrawal requests.
--   
--   <tt>Perm_R_Withdrawals</tt> permission required.
getWithdrawalRequests :: BitXAuth -> IO (BitXAPIResponse [WithdrawalRequest])

-- | Request a withdrawal
--   
--   Creates a new withdrawal request.
--   
--   <tt>Perm_W_Withdrawals</tt> permission required.
newWithdrawalRequest :: BitXAuth -> NewWithdrawal -> IO (BitXAPIResponse WithdrawalRequest)

-- | Get the status of a withdrawal request by ID
--   
--   Returns the status of a particular withdrawal request.
--   
--   <tt>Perm_R_Withdrawals</tt> permission required.
getWithdrawalRequest :: BitXAuth -> Text -> IO (BitXAPIResponse WithdrawalRequest)


-- | The API for dealing with quotes.
--   
--   Quotes allow you to lock in an exchange rate for a short time with the
--   option of either accepting or rejecting the quote.
--   
--   Quotes can be useful for various customer-facing applications where
--   price fluctuations would be confusing.
--   
--   The API is used as follows: First create a quote for the transaction
--   that you want to perform. If you decide to accept the quote before it
--   expires, you will exercise the quote. If you decide not to accept it,
--   you will discard the quote. You can also retrieve the status of a
--   quote at any time.
module Network.Bitcoin.BitX.Private.Quote

-- | Create a quote
--   
--   Creates a new quote to buy or sell a particular amount.
--   
--   You can specify either the exact amount that you want to pay or the
--   exact amount that you want to receive.
--   
--   For example, to buy exactly 0.1 Bitcoin using ZAR, you would create a
--   quote to BUY 0.1 XBTZAR. The returned quote includes the appropriate
--   ZAR amount. To buy Bitcoin using exactly ZAR 100, you would create a
--   quote to SELL 100 ZARXBT. The returned quote specifies the Bitcoin as
--   the counter amount that will be returned.
--   
--   An error is returned if your account is not verified for the currency
--   pair, or if your account would have insufficient balance to ever
--   exercise the quote.
--   
--   The currency pair can also be flipped if you want to buy or sell the
--   counter currency (e.g. ZARXBT).
--   
--   <tt>Perm_W_Orders</tt> permission required.
newQuote :: BitXAuth -> QuoteRequest -> IO (BitXAPIResponse OrderQuote)

-- | Get a quote
--   
--   Get the latest status of a quote, retrieved by ID.
--   
--   <tt>Perm_R_Orders</tt> permission required.
getQuote :: BitXAuth -> Text -> IO (BitXAPIResponse OrderQuote)

-- | Exercise a quote
--   
--   Exercise a quote to perform the trade. If there is sufficient balance
--   available in your account, it will be debited and the counter amount
--   credited.
--   
--   An error is returned if the quote has expired or if you have
--   insufficient available balance.
--   
--   <tt>Perm_W_Orders</tt> permission required.
exerciseQuote :: BitXAuth -> Text -> IO (BitXAPIResponse OrderQuote)

-- | Discard a quote
--   
--   Discard a quote. Once a quote has been discarded, it cannot be
--   exercised even if it has not expired yet.
--   
--   <tt>Perm_W_Orders</tt> permission required.
discardQuote :: BitXAuth -> Text -> IO (BitXAPIResponse OrderQuote)


-- | Creating and working with orders
--   
--   Trading on the market is done by submitting trade orders. After a new
--   order has been created, it is submitted for processing by the order
--   matching engine. The order then either matches against an existing
--   order in the order book and is filled or it rests in the order book
--   until it is stopped.
module Network.Bitcoin.BitX.Private.Order

-- | Returns a list of the most recently placed orders.
--   
--   If the second parameter is <tt>Nothing</tt> then this will return
--   orders for all markets, whereas if it is <tt>Just cpy</tt> for some
--   <tt>CcyPair cpy</tt> then the results will be specific to that market.
--   
--   If the third parameter is <tt>Nothing</tt> then this will return
--   orders in all states, whereas if it is <tt>Just COMPLETE</tt> or
--   <tt>Just PENDING</tt> then it will return only completed or pending
--   orders, respectively.
--   
--   This list is truncated after 100 items.
--   
--   <tt>Perm_R_Orders</tt> permission is required.
getAllOrders :: BitXAuth -> Maybe CcyPair -> Maybe RequestStatus -> IO (BitXAPIResponse [PrivateOrder])

-- | Create a new order.
--   
--   <b>Warning! Orders cannot be reversed once they have executed. Please
--   ensure your program has been</b> <b>thoroughly tested before
--   submitting orders.</b>
--   
--   <tt>Perm_W_Orders</tt> permission is required.
postOrder :: BitXAuth -> OrderRequest -> IO (BitXAPIResponse OrderID)

-- | Request to stop an order.
--   
--   <tt>Perm_W_Orders</tt> permission is required.
stopOrder :: BitXAuth -> OrderID -> IO (BitXAPIResponse RequestSuccess)

-- | Get an order by its ID
--   
--   <tt>Perm_R_Orders</tt> permission is required.
getOrder :: BitXAuth -> OrderID -> IO (BitXAPIResponse PrivateOrder)

-- | Create a new market order.
--   
--   <b>Warning! Orders cannot be reversed once they have executed. Please
--   ensure your program has been</b> <b>thoroughly tested before
--   submitting orders.</b>
--   
--   A market order executes immediately, and either buys as much bitcoin
--   that can be bought for a set amount of fiat currency, or sells a set
--   amount of bitcoin for as much fiat as possible.
--   
--   Use order type <tt>BID</tt> to buy bitcoin or <tt>ASK</tt> to sell.
--   
--   <tt>Perm_W_Orders</tt> permission is required.
postMarketOrder :: BitXAuth -> MarketOrderRequest -> IO (BitXAPIResponse OrderID)

-- | Returns a list of your recent trades for a given pair, sorted by
--   oldest first.
--   
--   <tt>Perm_R_Orders</tt> permission is required.
getAllTrades :: BitXAuth -> CcyPair -> Maybe UTCTime -> Maybe Integer -> IO (BitXAPIResponse [PrivateTrade])


-- | Retrieving fee information.
--   
--   The BitX fee structure is cummulative-volume-based. The sole endpoint
--   in this package returns the user's current fee structure and 30-day
--   volume.
module Network.Bitcoin.BitX.Private.Fees

-- | Get fee structure and 30-day volume (as of midnight) for a currency
--   pair
--   
--   <tt>Perm_R_Orders</tt> permission required.
getFeeInfo :: BitXAuth -> CcyPair -> IO (BitXAPIResponse FeeInfo)


-- | <h1>The private BitX API.</h1>
--   
--   Each one of the calls takes at least a <a>BitXAuth</a> containing a
--   previously-created API id and secret (created by visiting
--   <a>https://bitx.co/settings#/api_keys</a>), and will return a
--   <a>BitXAPIResponse</a>..
--   
--   It would probably be best to create the <a>BitXAuth</a> record using
--   the constructor <a>mkBitXAuth</a> and lens setters:
--   
--   <pre>
--   let auth = mkBitXAuth
--                <tt>&amp;</tt> BitX.id <tt>.~</tt> "dude"
--                &amp; BitX.secret .~ "mySecret"
--   let resp = BitX.getBalances auth
--   ...
--   </pre>
--   
--   With the OverloadedStrings extension enabled, one may also simply
--   write <tt> let auth = "dude:mySecret" :: BitXAuth </tt> with a colon
--   separating the id from the secret.
--   
--   <h1>Permissions</h1>
--   
--   Each API key is granted a set of permissions when it is created. The
--   key can only be used to call the permitted API functions.
--   
--   Here is a list of the possible permissions:
--   
--   <ul>
--   <li><tt>Perm_R_Balance = 1</tt> (View balance)</li>
--   <li><tt>Perm_R_Transactions = 2</tt> (View transactions)</li>
--   <li><tt>Perm_W_Send = 4</tt> (Send to any address)</li>
--   <li><tt>Perm_R_Addresses = 8</tt> (View addresses)</li>
--   <li><tt>Perm_W_Addresses = 16</tt> (Create addresses)</li>
--   <li><tt>Perm_R_Orders = 32</tt> (View orders)</li>
--   <li><tt>Perm_W_Orders = 64</tt> (Create orders)</li>
--   <li><tt>Perm_R_Withdrawals = 128</tt> (View withdrawals)</li>
--   <li><tt>Perm_W_Withdrawals = 256</tt> (Create withdrawals)</li>
--   <li><tt>Perm_R_Merchant = 512</tt> (View merchant invoices)</li>
--   <li><tt>Perm_W_Merchant = 1024</tt> (Create merchant invoices)</li>
--   <li><tt>Perm_W_ClientDebit = 8192</tt> (Debit accounts)</li>
--   <li><tt>Perm_W_ClientCredit = 16384</tt> (Credit accounts)</li>
--   <li><tt>Perm_R_Beneficiaries = 32768</tt> (View beneficiaries)</li>
--   <li><tt>Perm_W_Beneficiaries = 65536</tt> (Create and delete
--   beneficiaries)</li>
--   </ul>
--   
--   A set of permissions is represented as the bitwise OR of each
--   permission in the set. For example the set of permissions required to
--   view balances and orders is <tt>Perm_R_Balance | Perm_R_Orders =
--   33.</tt>
module Network.Bitcoin.BitX.Private

-- | Create an additional account for the specified currency
--   
--   Note that the <a>id</a> field of the second parameter can be left
--   blank. The call will return an <a>Account</a> object resembling the
--   parameter, but with the <a>id</a> field filled in with the newly
--   created account's id.
--   
--   You must be verified to trade the currency in question in order to be
--   able to create an account.
--   
--   <tt>Perm_W_Addresses</tt> permission required.
newAccount :: BitXAuth -> Account -> IO (BitXAPIResponse Account)

-- | Return account balances
--   
--   <tt>Perm_R_Balance</tt> permission required.
getBalances :: BitXAuth -> IO (BitXAPIResponse [Balance])

-- | Returns the default receive address associated with your account and
--   the amount received via the address
--   
--   You can specify an optional address parameter to return information
--   for a non-default receive address. In the response, total_received is
--   the total confirmed Bitcoin amount received excluding unconfirmed
--   transactions. total_unconfirmed is the total sum of unconfirmed
--   receive transactions.
--   
--   <tt>Perm_R_Addresses</tt> permission is required.
getFundingAddress :: BitXAuth -> Asset -> Maybe Text -> IO (BitXAPIResponse FundingAddress)

-- | Create receive address
--   
--   Allocates a new receive address to your account. Address creation is
--   rate limited to 1 per hour, allowing for bursts of up to 10
--   consecutive calls.
--   
--   <tt>Perm_R_Addresses</tt> permission is required.
newFundingAddress :: BitXAuth -> Asset -> IO (BitXAPIResponse FundingAddress)

-- | Send Bitcoin from your account to a Bitcoin address or email address.
--   
--   If the email address is not associated with an existing BitX account,
--   an invitation to create an account and claim the funds will be sent.
--   
--   <b>Warning! Bitcoin transactions are irreversible. Please ensure your
--   program has been thoroughly</b> <b>tested before using this call.</b>
--   
--   <tt>Perm_W_Send</tt> permission required. Note that when creating an
--   API key on the BitX site, selecting "Full access" is not sufficient to
--   add the <tt>Perm_W_Send</tt> permission. Instead, the permission needs
--   to be enabled explicitely by selecting "Custom."
sendToAddress :: BitXAuth -> BitcoinSendRequest -> IO (BitXAPIResponse RequestSuccess)

-- | Return a list of transaction entries from an account.
--   
--   Transaction entry rows are numbered sequentially starting from 1,
--   where 1 is the oldest entry. The range of rows to return are specified
--   with the min_row (inclusive) and max_row (exclusive) parameters. At
--   most 1000 rows can be requested per call.
--   
--   If min_row or max_row is nonpositive, the range wraps around the most
--   recent row. For example, to fetch the 100 most recent rows, use
--   min_row=-100 and max_row=0.
--   
--   <tt>Perm_R_Transactions</tt> permission required.
getTransactions :: BitXAuth -> AccountID -> Int -> Int -> IO (BitXAPIResponse [Transaction])

-- | Pending transactions
--   
--   Return a list of all pending transactions related to the account.
--   
--   Unlike account entries, pending transactions are not numbered, and may
--   be reordered, deleted or updated at any time.
--   
--   <tt>Perm_R_Transactions</tt> permission required.
getPendingTransactions :: BitXAuth -> AccountID -> IO (BitXAPIResponse [Transaction])


-- | This module re-exports the entire API. In practice it will be
--   sufficient for every use case.
module Network.Bitcoin.BitX
