bitx-bitcoin 0.10.0.0 → 0.11.0.0
raw patch · 10 files changed
+240/−143 lines, 10 filesdep +deepseqPVP ok
version bump matches the API change (PVP)
Dependencies added: deepseq
API changes (from Hackage documentation)
- Network.Bitcoin.BitX.Types: PrivateOrderWithTrades :: Scientific -> Scientific -> UTCTime -> UTCTime -> UTCTime -> Scientific -> Scientific -> Int -> Scientific -> OrderID -> CcyPair -> RequestStatus -> OrderType -> [Trade] -> PrivateOrderWithTrades
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesBase] :: PrivateOrderWithTrades -> Scientific
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesCompletedTimestamp] :: PrivateOrderWithTrades -> UTCTime
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesCounter] :: PrivateOrderWithTrades -> Scientific
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesCreationTimestamp] :: PrivateOrderWithTrades -> UTCTime
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesExpirationTimestamp] :: PrivateOrderWithTrades -> UTCTime
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesFeeBase] :: PrivateOrderWithTrades -> Scientific
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesFeeCounter] :: PrivateOrderWithTrades -> Scientific
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesId] :: PrivateOrderWithTrades -> OrderID
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesLimitPrice] :: PrivateOrderWithTrades -> Int
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesLimitVolume] :: PrivateOrderWithTrades -> Scientific
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesOrderType] :: PrivateOrderWithTrades -> OrderType
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesPair] :: PrivateOrderWithTrades -> CcyPair
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesState] :: PrivateOrderWithTrades -> RequestStatus
- Network.Bitcoin.BitX.Types: [privateOrderWithTradesTrades] :: PrivateOrderWithTrades -> [Trade]
- Network.Bitcoin.BitX.Types: class HasTrades s a | s -> a
- Network.Bitcoin.BitX.Types: data PrivateOrderWithTrades
- Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.Class.FromJSON Network.Bitcoin.BitX.Types.Asset
- Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.Class.FromJSON Network.Bitcoin.BitX.Types.CcyPair
- Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.Class.FromJSON Network.Bitcoin.BitX.Types.OrderType
- Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.Class.FromJSON Network.Bitcoin.BitX.Types.QuoteType
- Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.Class.FromJSON Network.Bitcoin.BitX.Types.WithdrawalType
- Network.Bitcoin.BitX.Types: instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.PrivateOrderWithTrades
- Network.Bitcoin.BitX.Types: instance GHC.Show.Show Network.Bitcoin.BitX.Types.PrivateOrderWithTrades
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasBase Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Scientific.Scientific
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasCompletedTimestamp Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Time.Clock.UTC.UTCTime
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasCounter Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Scientific.Scientific
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasCreationTimestamp Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Time.Clock.UTC.UTCTime
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasExpirationTimestamp Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Time.Clock.UTC.UTCTime
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasFeeBase Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Scientific.Scientific
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasFeeCounter Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Scientific.Scientific
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasId Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Network.Bitcoin.BitX.Types.OrderID
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasLimitPrice Network.Bitcoin.BitX.Types.PrivateOrderWithTrades GHC.Types.Int
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasLimitVolume Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Data.Scientific.Scientific
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasOrderType Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Network.Bitcoin.BitX.Types.OrderType
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Network.Bitcoin.BitX.Types.CcyPair
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasState Network.Bitcoin.BitX.Types.PrivateOrderWithTrades Network.Bitcoin.BitX.Types.RequestStatus
- Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasTrades Network.Bitcoin.BitX.Types.PrivateOrderWithTrades [Network.Bitcoin.BitX.Types.Trade]
- Network.Bitcoin.BitX.Types: trades :: HasTrades s a => Lens' s a
+ Network.Bitcoin.BitX.Private.Order: getAllTrades :: BitXAuth -> CcyPair -> Maybe UTCTime -> Maybe Integer -> IO (BitXAPIResponse [PrivateTrade])
+ Network.Bitcoin.BitX.Types: PrivateTrade :: Scientific -> Scientific -> Scientific -> Scientific -> Bool -> Text -> CcyPair -> Int -> UTCTime -> OrderType -> Scientific -> PrivateTrade
+ Network.Bitcoin.BitX.Types: [privateTradeBase] :: PrivateTrade -> Scientific
+ Network.Bitcoin.BitX.Types: [privateTradeCounter] :: PrivateTrade -> Scientific
+ Network.Bitcoin.BitX.Types: [privateTradeFeeBase] :: PrivateTrade -> Scientific
+ Network.Bitcoin.BitX.Types: [privateTradeFeeCounter] :: PrivateTrade -> Scientific
+ Network.Bitcoin.BitX.Types: [privateTradeIsBuy] :: PrivateTrade -> Bool
+ Network.Bitcoin.BitX.Types: [privateTradeOrderId] :: PrivateTrade -> Text
+ Network.Bitcoin.BitX.Types: [privateTradeOrderType] :: PrivateTrade -> OrderType
+ Network.Bitcoin.BitX.Types: [privateTradePair] :: PrivateTrade -> CcyPair
+ Network.Bitcoin.BitX.Types: [privateTradePrice] :: PrivateTrade -> Int
+ Network.Bitcoin.BitX.Types: [privateTradeTimestamp] :: PrivateTrade -> UTCTime
+ Network.Bitcoin.BitX.Types: [privateTradeVolume] :: PrivateTrade -> Scientific
+ Network.Bitcoin.BitX.Types: class HasOrderId s a | s -> a
+ Network.Bitcoin.BitX.Types: data PrivateTrade
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Account
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Asset
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Balance
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.BitXAuth
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.BitXError
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.BitcoinSendRequest
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.CcyPair
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.FundingAddress
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.MarketOrderRequest
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.NewWithdrawal
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Order
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.OrderQuote
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.OrderRequest
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.OrderType
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Orderbook
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.PrivateOrder
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.PrivateTrade
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.QuoteRequest
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.QuoteType
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.RequestStatus
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Ticker
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Trade
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.Transaction
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.WithdrawalRequest
+ Network.Bitcoin.BitX.Types: instance Control.DeepSeq.NFData Network.Bitcoin.BitX.Types.WithdrawalType
+ Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.Asset
+ Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.CcyPair
+ Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.OrderType
+ Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.QuoteType
+ Network.Bitcoin.BitX.Types: instance Data.Aeson.Types.FromJSON.FromJSON Network.Bitcoin.BitX.Types.WithdrawalType
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Account
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Asset
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Balance
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.BitXAuth
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.BitXError
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.BitcoinSendRequest
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.CcyPair
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.FundingAddress
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.MarketOrderRequest
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.NewWithdrawal
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Order
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.OrderQuote
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.OrderRequest
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.OrderType
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Orderbook
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.PrivateOrder
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.PrivateTrade
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.QuoteRequest
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.QuoteType
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.RequestStatus
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Ticker
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Trade
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.Transaction
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.WithdrawalRequest
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.WithdrawalType
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.PrivateTrade
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Account
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Asset
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Balance
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.BitXAuth
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.BitXError
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.BitcoinSendRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.CcyPair
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.FundingAddress
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.MarketOrderRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.NewWithdrawal
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Order
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.OrderQuote
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.OrderRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.OrderType
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Orderbook
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.PrivateTrade
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.QuoteRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.QuoteType
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.RequestStatus
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Ticker
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Trade
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.Transaction
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.WithdrawalRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.WithdrawalType
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Account
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Balance
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.BitXAuth
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.BitXError
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.BitcoinSendRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.FundingAddress
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.MarketOrderRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.NewWithdrawal
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Order
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.OrderQuote
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.OrderRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Orderbook
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.PrivateOrder
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.PrivateTrade
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.QuoteRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Ticker
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Trade
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.Transaction
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.WithdrawalRequest
+ Network.Bitcoin.BitX.Types: instance GHC.Show.Show Network.Bitcoin.BitX.Types.PrivateTrade
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasBase Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasCounter Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasFeeBase Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasFeeCounter Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasIsBuy Network.Bitcoin.BitX.Types.PrivateTrade GHC.Types.Bool
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasOrderId Network.Bitcoin.BitX.Types.PrivateTrade Data.Text.Internal.Text
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasOrderType Network.Bitcoin.BitX.Types.PrivateTrade Network.Bitcoin.BitX.Types.OrderType
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasPair Network.Bitcoin.BitX.Types.PrivateTrade Network.Bitcoin.BitX.Types.CcyPair
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasPrice Network.Bitcoin.BitX.Types.PrivateTrade GHC.Types.Int
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasTimestamp Network.Bitcoin.BitX.Types.PrivateTrade Data.Time.Clock.UTC.UTCTime
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasVolume Network.Bitcoin.BitX.Types.PrivateTrade Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: orderId :: HasOrderId s a => Lens' s a
- Network.Bitcoin.BitX.Private.Order: getOrder :: BitXAuth -> OrderID -> IO (BitXAPIResponse PrivateOrderWithTrades)
+ Network.Bitcoin.BitX.Private.Order: getOrder :: BitXAuth -> OrderID -> IO (BitXAPIResponse PrivateOrder)
Files
- CHANGES +6/−3
- README.md +1/−1
- bitx-bitcoin.cabal +5/−4
- src/Network/Bitcoin/BitX/Private.hs +2/−1
- src/Network/Bitcoin/BitX/Private/Order.hs +19/−2
- src/Network/Bitcoin/BitX/Public.hs +3/−2
- src/Network/Bitcoin/BitX/Types.hs +101/−49
- src/Network/Bitcoin/BitX/Types/Internal.hs +48/−40
- test/Network/Bitcoin/BitX/Spec/Specs/AesonRecordSpec.hs +38/−22
- test/Network/Bitcoin/BitX/Spec/Specs/LensSpec.hs +17/−19
CHANGES view
@@ -1,10 +1,13 @@+v0.11.0.0+* The BitX API no longer gives trades when returning private orders. BREAKING CHANGE.+* Due to the above change, a new function -- getAllTrades -- has been added to the private order API.+* The basic types now come with a large set of default typeclasses, to minimise the need for orphan instances.+ v0.10.0.0-* New optional beneficiary ID field for withdrawal requests.+* New optional beneficiary ID field for withdrawal requests. BREAKING CHANGE. v0.9.0.1 * Compatibility with http-client-0.5.0 and http-client-tls-0.3.0.--v0.9.0.0 * The BitXAuth type can now be written as a string using the OverloadedStrings extension. v0.9.0.0
README.md view
@@ -1,4 +1,4 @@-[](https://travis-ci.org/tebello-thejane/bitx-haskell)+[](https://travis-ci.org/tebello-thejane/bitx.hs) [](https://hackage.haskell.org/package/bitx-bitcoin) [](http://opensource.org/licenses/BSD-3-Clause)
bitx-bitcoin.cabal view
@@ -1,5 +1,5 @@ name: bitx-bitcoin-version: 0.10.0.0+version: 0.11.0.0 synopsis: A Haskell library for working with the BitX bitcoin exchange. description:@@ -34,7 +34,7 @@ cabal-version: >=1.10 -homepage: https://github.com/tebello-thejane/bitx-haskell+homepage: https://github.com/tebello-thejane/bitx.hs tested-with: GHC >=7.8.1 && <=8.0.1 @@ -75,7 +75,8 @@ http-client-tls, microlens, microlens-th,- http-types+ http-types,+ deepseq default-language: Haskell2010 hs-source-dirs: src@@ -86,7 +87,7 @@ type: git location:- git://github.com/tebello-thejane/bitx-haskell.git+ git://github.com/tebello-thejane/bitx.hs.git --------------------------------------------------------------------------------
src/Network/Bitcoin/BitX/Private.hs view
@@ -131,7 +131,8 @@ {- | Create receive address -Allocates a new receive address to your account. There is a limit of 50 receive addresses per user.+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. @Perm_R_Addresses@ permission is required. -}
src/Network/Bitcoin/BitX/Private/Order.hs view
@@ -25,7 +25,8 @@ postOrder, stopOrder, getOrder,- postMarketOrder+ postMarketOrder,+ getAllTrades ) where import Network.Bitcoin.BitX.Internal@@ -33,6 +34,8 @@ import qualified Data.Text as Txt import Network.Bitcoin.BitX.Response import Data.Monoid ((<>))+import Data.Time (UTCTime)+import Network.Bitcoin.BitX.Types.Internal (timeToTimestamp) {- | Returns a list of the most recently placed orders. @@ -80,7 +83,7 @@ @Perm_R_Orders@ permission is required. -} -getOrder :: BitXAuth -> OrderID -> IO (BitXAPIResponse PrivateOrderWithTrades)+getOrder :: BitXAuth -> OrderID -> IO (BitXAPIResponse PrivateOrder) getOrder auth oid = simpleBitXGetAuth_ auth $ "orders/" <> oid {- | Create a new market order.@@ -98,3 +101,17 @@ -} postMarketOrder :: BitXAuth -> MarketOrderRequest -> IO (BitXAPIResponse OrderID) postMarketOrder auth moreq = simpleBitXPOSTAuth_ auth moreq "marketorder"++{- | Returns a list of your recent trades for a given pair, sorted by oldest first.++@Perm_R_Orders@ permission is required.+-}+getAllTrades :: BitXAuth -> CcyPair -> Maybe UTCTime -> Maybe Integer -> IO (BitXAPIResponse [PrivateTrade])+getAllTrades auth cpair since limit = simpleBitXGetAuth_ auth url+ where+ url = "listtrades?pair=" <> (Txt.pack $ show cpair) <> case (since, limit) of+ (Nothing, Nothing) -> ""+ (Just sn, Nothing) -> "&since=" <> Txt.pack (show (timeToTimestamp sn))+ (Nothing, Just lm) -> "&limit=" <> Txt.pack (show lm)+ (Just sn, Just lm) -> "&since=" <> Txt.pack (show (timeToTimestamp sn)) <> "&limit=" <> Txt.pack (show lm)+
src/Network/Bitcoin/BitX/Public.hs view
@@ -76,5 +76,6 @@ {- | Returns a list of the most recent trades -} getTrades :: Maybe UTCTime -> CcyPair -> IO (BitXAPIResponse [Trade])-getTrades Nothing cyp = simpleBitXGet_ $ "trades?pair=" <> pack (show cyp)-getTrades (Just since) cyp = simpleBitXGet_ $ "trades?pair=" <> pack (show cyp) <> "since=" <> pack (show (timeToTimestamp since))+getTrades Nothing cyp = simpleBitXGet_ $ "trades?pair=" <> pack (show cyp)+getTrades (Just since) cyp = simpleBitXGet_ $ "trades?pair=" <> pack (show cyp) <> "&since=" <> pack (show (timeToTimestamp since))+
src/Network/Bitcoin/BitX/Types.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE DeriveGeneric, QuasiQuotes, OverloadedStrings, DataKinds,- MultiParamTypeClasses, TemplateHaskell, FunctionalDependencies, FlexibleInstances #-}+ MultiParamTypeClasses, TemplateHaskell, FunctionalDependencies, FlexibleInstances,+ DeriveDataTypeable, StandaloneDeriving #-} ----------------------------------------------------------------------------- -- |@@ -33,7 +34,6 @@ MarketOrderRequest(..), RequestSuccess, BitXError(..),- PrivateOrderWithTrades(..), AccountID, Asset(..), Balance(..),@@ -48,6 +48,7 @@ BitXClientAuth, Transaction(..), Account(..),+ PrivateTrade(..), -- | Convenient constructors for records which serve as input parameters to functions. These are not -- completely safe (since you can forget to set a field and the Haskell compiler won't notice),@@ -100,7 +101,6 @@ HasState(..), HasOrderType(..), HasLimitVolume(..),- HasTrades(..), HasRowIndex(..), HasBalance(..), HasAvailable(..),@@ -127,7 +127,8 @@ HasName(..), HasIsBuy(..), HasStatus(..),- HasBeneficiaryId(..)+ HasBeneficiaryId(..),+ HasOrderId(..) ) where import Data.Aeson (FromJSON(..))@@ -137,6 +138,8 @@ import Data.Scientific (Scientific) import Lens.Micro.TH (makeFields) import Data.String (IsString(..))+import Data.Data (Data, Typeable)+import Control.DeepSeq (NFData) type OrderID = Text @@ -144,8 +147,10 @@ data OrderType = ASK -- ^ A request to sell | BID -- ^ A request to buy- deriving (Show, Generic, Eq)+ deriving (Show, Generic, Eq, Data, Typeable, Ord) +instance NFData OrderType+ -- | The state of a (private) placed request -- either an order or a withdrawal request. data RequestStatus = PENDING -- ^ Not yet completed. An order will stay in 'PENDING' state even as it is partially@@ -153,8 +158,10 @@ | COMPLETE -- ^ Completed. | CANCELLED -- ^ Cancelled. Note that an order cannot be in 'CANCELLED' state, since cancelling -- an order removes it from the orderbook.- deriving (Show, Generic, Eq)+ deriving (Show, Generic, Eq, Data, Typeable, Ord) +instance NFData RequestStatus+ type AccountID = Text -- | A possible error which the BitX API might return,@@ -165,8 +172,10 @@ data BitXError = BitXError { bitXErrorError :: Text, bitXErrorErrorCode :: Text- } deriving (Eq, Show)+ } deriving (Eq, Generic, Show, Data, Typeable, Ord) +instance NFData BitXError+ makeFields ''BitXError -- | A currency pair@@ -185,8 +194,10 @@ | IDRXBT -- ^ Indonesian Rupiah vs. Bitcoin | XBTSGD -- ^ Bitcoin vs. Singapore Dollar | SGDXBT -- ^ Singapore Dollar vs. Bitcoin- deriving (Show, Generic, Eq)+ deriving (Show, Generic, Eq, Data, Typeable, Ord) +instance NFData CcyPair+ -- | 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 @bid <= ask.@@@ -197,8 +208,10 @@ tickerLastTrade :: Maybe Int, tickerRolling24HourVolume :: Scientific, tickerPair :: CcyPair- } deriving (Eq, Show)+ } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData Ticker+ makeFields ''Ticker -- | A trade-able asset. Essentially, a currency.@@ -211,8 +224,10 @@ | NGN -- ^ Nigerian Naira | IDR -- ^ Indonesian Rupiah | SGD -- ^ Singapore Dollar- deriving (Show, Generic, Eq)+ deriving (Show, Generic, Eq, Data, Typeable, Ord) +instance NFData Asset+ -- | The type of a withdrawal request. data WithdrawalType = ZAR_EFT -- ^ ZAR by Electronic Funds Transfer@@ -220,18 +235,24 @@ | KES_MPESA -- ^ Kenyan Shilling by Vodafone MPESA | MYR_IBG -- ^ Malaysian Ringgit by Interbank GIRO (?) | IDR_LLG -- ^ Indonesian Rupiah by Lalu Lintas Giro (??)- deriving (Show, Generic, Eq)+ deriving (Show, Generic, Eq, Data, Typeable, Ord) -data QuoteType = BUY | SELL deriving (Show, Generic, Eq)+instance NFData WithdrawalType +data QuoteType = BUY | SELL deriving (Show, Generic, Eq, Data, Typeable, Ord)++instance NFData QuoteType+ type RequestSuccess = Bool -- | A single placed order in the orderbook data Order = Order { orderVolume :: Scientific, orderPrice :: Int- } deriving (Eq, Show)+ } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData Order+ makeFields ''Order -- | Convenient type alias for a bid order@@ -246,8 +267,10 @@ orderbookTimestamp :: UTCTime, orderbookBids :: [Bid], orderbookAsks :: [Ask]- } deriving (Eq, Show)+ } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData Orderbook+ makeFields ''Orderbook data Trade = Trade {@@ -255,15 +278,19 @@ tradeVolume :: Scientific, tradePrice :: Int, tradeIsBuy :: Bool- } deriving (Eq, Show)+ } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData Trade+ makeFields ''Trade -- | An auth type used by all private API calls, after authorisation. data BitXAuth = BitXAuth {bitXAuthId :: Text,- bitXAuthSecret :: Text} deriving (Eq, Show)+ bitXAuthSecret :: Text} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData BitXAuth+ -- |@mkBitXAuth = BitXAuth "" ""@ mkBitXAuth :: BitXAuth mkBitXAuth = BitXAuth "" ""@@ -277,7 +304,6 @@ BitXAuth (pack $ fst cut) (pack $ tail $ snd cut) where cut = span (/= ':') auth- -- | -- >>> :set -XOverloadedStrings -- >>> "id:secret" :: BitXAuth@@ -285,6 +311,7 @@ -- >>> "id:se:cret" :: BitXAuth -- BitXAuth {bitXAuthId = "id", bitXAuthSecret = "se:cret"} + -- | A recently placed (private) order, containing a lot more information than is available on the -- public order book. data PrivateOrder = PrivateOrder@@ -300,29 +327,11 @@ privateOrderId :: OrderID, privateOrderPair :: CcyPair, privateOrderState :: RequestStatus,- privateOrderOrderType :: OrderType } deriving (Eq, Show)--makeFields ''PrivateOrder+ privateOrderOrderType :: OrderType } deriving (Eq, Show, Generic, Data, Typeable) --- | A recently placed (private) order, containing a lot more information than is available on the--- public order book, together with details of any trades which have (partially) filled it.-data PrivateOrderWithTrades = PrivateOrderWithTrades- {privateOrderWithTradesBase :: Scientific,- privateOrderWithTradesCounter :: Scientific,- privateOrderWithTradesCreationTimestamp :: UTCTime,- privateOrderWithTradesExpirationTimestamp :: UTCTime,- privateOrderWithTradesCompletedTimestamp :: UTCTime,- privateOrderWithTradesFeeBase :: Scientific,- privateOrderWithTradesFeeCounter :: Scientific,- privateOrderWithTradesLimitPrice :: Int,- privateOrderWithTradesLimitVolume :: Scientific,- privateOrderWithTradesId :: OrderID,- privateOrderWithTradesPair :: CcyPair,- privateOrderWithTradesState :: RequestStatus,- privateOrderWithTradesOrderType :: OrderType,- privateOrderWithTradesTrades :: [Trade] } deriving (Eq, Show)+instance NFData PrivateOrder -makeFields ''PrivateOrderWithTrades+makeFields ''PrivateOrder -- | A transaction on a private user account. data Transaction = Transaction@@ -333,8 +342,10 @@ transactionBalanceDelta :: Scientific, transactionAvailableDelta :: Scientific, transactionCurrency :: Asset,- transactionDescription :: Text} deriving (Eq, Show)+ transactionDescription :: Text} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData Transaction+ makeFields ''Transaction -- | A request to place an order.@@ -342,8 +353,10 @@ {orderRequestPair :: CcyPair, orderRequestOrderType :: OrderType, orderRequestVolume :: Scientific,- orderRequestPrice :: Int } deriving (Eq, Show)+ orderRequestPrice :: Int } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData OrderRequest+ makeFields ''OrderRequest -- |@mkOrderRequest = OrderRequest ZARXBT BID 0 0@@@ -353,8 +366,10 @@ data MarketOrderRequest = MarketOrderRequest {marketOrderRequestPair :: CcyPair, marketOrderRequestOrderType :: OrderType,- marketOrderRequestVolume :: Scientific } deriving (Eq, Show)+ marketOrderRequestVolume :: Scientific } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData MarketOrderRequest+ makeFields ''MarketOrderRequest -- |@mkMarketOrderRequest = MarketOrderRequest ZARXBT BID 0@@@ -367,8 +382,10 @@ balanceAsset :: Asset, balanceBalance :: Scientific, balanceReserved :: Scientific,- balanceUnconfirmed :: Scientific } deriving (Eq, Show)+ balanceUnconfirmed :: Scientific } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData Balance+ makeFields ''Balance -- | A registered address for an acocunt.@@ -376,23 +393,29 @@ {fundingAddressAsset :: Asset, fundingAddressAddress :: Text, fundingAddressTotalReceived :: Scientific,- fundingAddressTotalUnconfirmed :: Scientific} deriving (Eq, Show)+ fundingAddressTotalUnconfirmed :: Scientific} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData FundingAddress+ makeFields ''FundingAddress -- | The state of a request to withdraw from an account. data WithdrawalRequest = WithdrawalRequest {withdrawalRequestStatus :: RequestStatus,- withdrawalRequestId :: Text } deriving (Eq, Show)+ withdrawalRequestId :: Text } deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData WithdrawalRequest+ makeFields ''WithdrawalRequest -- | A request to withdraw from an account. data NewWithdrawal = NewWithdrawal {newWithdrawalWithdrawalType :: WithdrawalType, newWithdrawalAmount :: Scientific,- newWithdrawalBeneficiaryId :: Maybe Text} deriving (Eq, Show)+ newWithdrawalBeneficiaryId :: Maybe Text} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData NewWithdrawal+ makeFields ''NewWithdrawal -- |@mkNewWithdrawal = NewWithdrawal ZAR_EFT 0@@@ -405,8 +428,10 @@ bitcoinSendRequestCurrency :: Asset, bitcoinSendRequestAddress :: Text, bitcoinSendRequestDescription :: Maybe Text,- bitcoinSendRequestMessage :: Maybe Text} deriving (Eq, Show)+ bitcoinSendRequestMessage :: Maybe Text} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData BitcoinSendRequest+ makeFields ''BitcoinSendRequest -- |@mkBitcoinSendRequest = BitcoinSendRequest 0 ZAR "" Nothing Nothing@@@ -417,8 +442,10 @@ data QuoteRequest = QuoteRequest {quoteRequestQuoteType :: QuoteType, quoteRequestPair :: CcyPair,- quoteRequestBaseAmount :: Scientific} deriving (Eq, Show)+ quoteRequestBaseAmount :: Scientific} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData QuoteRequest+ makeFields ''QuoteRequest -- |@mkQuoteRequest = QuoteRequest BUY ZARXBT 0@@@ -435,22 +462,46 @@ orderQuoteCreatedAt :: UTCTime, orderQuoteExpiresAt :: UTCTime, orderQuoteDiscarded :: Bool,- orderQuoteExercised :: Bool} deriving (Eq, Show)+ orderQuoteExercised :: Bool} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData OrderQuote+ makeFields ''OrderQuote -- | A registered account. data Account = Account {accountId :: Text, accountName :: Text,- accountCurrency :: Asset} deriving (Eq, Show)+ accountCurrency :: Asset} deriving (Eq, Show, Generic, Data, Typeable, Ord) +instance NFData Account+ makeFields ''Account -- |@mkAccount = Account "" "" ZAR@ mkAccount :: Account mkAccount = Account "" "" ZAR +-- | A private trade, containing a lot more information than is avaiable when inspecting trades+-- via the public API.+data PrivateTrade = PrivateTrade {+ privateTradeBase :: Scientific,+ privateTradeCounter :: Scientific,+ privateTradeFeeBase :: Scientific,+ privateTradeFeeCounter :: Scientific,+ privateTradeIsBuy :: Bool,+ privateTradeOrderId :: Text,+ privateTradePair :: CcyPair,+ privateTradePrice :: Int,+ privateTradeTimestamp :: UTCTime,+ privateTradeOrderType :: OrderType,+ privateTradeVolume :: Scientific+ } deriving (Eq, Show, Generic, Data, Typeable, Ord)++instance NFData PrivateTrade++makeFields ''PrivateTrade+ instance FromJSON CcyPair instance FromJSON Asset@@ -460,3 +511,4 @@ instance FromJSON WithdrawalType instance FromJSON QuoteType+
src/Network/Bitcoin/BitX/Types/Internal.hs view
@@ -365,46 +365,6 @@ aesToRec RequestSuccess_ {..} = requestSuccess'success -------------------------------------- PrivateOrderWithTrades type ------------------------------------data PrivateOrderWithTrades_ = PrivateOrderWithTrades_- { privateOrderWithTrades'base :: QuotedScientific- , privateOrderWithTrades'counter :: QuotedScientific- , privateOrderWithTrades'creation_timestamp :: TimestampMS- , privateOrderWithTrades'expiration_timestamp :: TimestampMS- , privateOrderWithTrades'completed_timestamp :: TimestampMS- , privateOrderWithTrades'fee_base :: QuotedScientific- , privateOrderWithTrades'fee_counter :: QuotedScientific- , privateOrderWithTrades'limit_price :: QuotedInt- , privateOrderWithTrades'limit_volume :: QuotedScientific- , privateOrderWithTrades'order_id :: Types.OrderID- , privateOrderWithTrades'pair :: Types.CcyPair- , privateOrderWithTrades'state :: RequestStatus_- , privateOrderWithTrades'type :: OrderType_- , privateOrderWithTrades'trades :: [Trade_]- }--$(AesTH.deriveFromJSON AesTH.defaultOptions{AesTH.fieldLabelModifier = last . splitOn "'"}- ''PrivateOrderWithTrades_)--instance BitXAesRecordConvert Types.PrivateOrderWithTrades where- type Aes Types.PrivateOrderWithTrades = PrivateOrderWithTrades_- aesToRec PrivateOrderWithTrades_ {..} =- Types.PrivateOrderWithTrades {privateOrderWithTradesBase = qsToScientific privateOrderWithTrades'base,- privateOrderWithTradesCounter = qsToScientific privateOrderWithTrades'counter,- privateOrderWithTradesCreationTimestamp = tsmsToUTCTime privateOrderWithTrades'creation_timestamp,- privateOrderWithTradesExpirationTimestamp = tsmsToUTCTime privateOrderWithTrades'expiration_timestamp,- privateOrderWithTradesCompletedTimestamp = tsmsToUTCTime privateOrderWithTrades'completed_timestamp,- privateOrderWithTradesFeeBase = qsToScientific privateOrderWithTrades'fee_base,- privateOrderWithTradesFeeCounter = qsToScientific privateOrderWithTrades'fee_counter,- privateOrderWithTradesLimitPrice = qiToInt privateOrderWithTrades'limit_price,- privateOrderWithTradesLimitVolume = qsToScientific privateOrderWithTrades'limit_volume,- privateOrderWithTradesId = privateOrderWithTrades'order_id,- privateOrderWithTradesPair = privateOrderWithTrades'pair,- privateOrderWithTradesState = requestStatusParse privateOrderWithTrades'state,- privateOrderWithTradesOrderType = orderTypeParse privateOrderWithTrades'type,- privateOrderWithTradesTrades = map aesToRec privateOrderWithTrades'trades}- -------------------------------------------- Balance type ------------------------------------------ data Balance_ = Balance_@@ -660,3 +620,51 @@ [("type", if (moreq ^. Types.orderType) == Types.BID then "BUY" else "SELL"), ("pair", showableToBytestring_ (moreq ^. Types.pair)), (if (moreq ^. Types.orderType) == Types.BID then "counter_volume" else "base_volume", realToDecimalByteString_ (moreq ^. Types.volume))]++------------------------------------------ PrivateTrade type ---------------------------------------++data PrivateTrade_ = PrivateTrade_+ { privateTrade'base :: QuotedScientific+ , privateTrade'counter :: QuotedScientific+ , privateTrade'fee_base :: QuotedScientific+ , privateTrade'fee_counter :: QuotedScientific+ , privateTrade'is_buy :: Bool+ , privateTrade'order_id :: Types.OrderID+ , privateTrade'pair :: Types.CcyPair+ , privateTrade'price :: QuotedInt+ , privateTrade'timestamp :: TimestampMS+ , privateTrade'type :: OrderType_+ , privateTrade'volume :: QuotedScientific+ }++$(AesTH.deriveFromJSON AesTH.defaultOptions{AesTH.fieldLabelModifier = last . splitOn "'"}+ ''PrivateTrade_)++instance BitXAesRecordConvert Types.PrivateTrade where+ type Aes Types.PrivateTrade = PrivateTrade_+ aesToRec PrivateTrade_ {..} =+ Types.PrivateTrade {privateTradeBase = qsToScientific privateTrade'base,+ privateTradeCounter = qsToScientific privateTrade'counter,+ privateTradeFeeBase = qsToScientific privateTrade'fee_base,+ privateTradeFeeCounter = qsToScientific privateTrade'fee_counter,+ privateTradeIsBuy = privateTrade'is_buy,+ privateTradeOrderId = privateTrade'order_id,+ privateTradePair = privateTrade'pair,+ privateTradePrice = qiToInt privateTrade'price,+ privateTradeTimestamp = tsmsToUTCTime privateTrade'timestamp,+ privateTradeOrderType = orderTypeParse privateTrade'type,+ privateTradeVolume = qsToScientific privateTrade'volume}++----------------------------------------- PrivateTrades type ----------------------------------------++data PrivateTrades_ = PrivateTrades_+ { privateTrades'trades :: [PrivateTrade_]+ }++$(AesTH.deriveFromJSON AesTH.defaultOptions{AesTH.fieldLabelModifier = last . splitOn "'"}+ ''PrivateTrades_)++instance BitXAesRecordConvert [Types.PrivateTrade] where+ type Aes [Types.PrivateTrade] = PrivateTrades_+ aesToRec PrivateTrades_ {..} =+ map aesToRec privateTrades'trades
test/Network/Bitcoin/BitX/Spec/Specs/AesonRecordSpec.hs view
@@ -121,28 +121,6 @@ recordAesCheck "{\"success\":true}" (True :: RequestSuccess)- it "PrivateOrderWithTrades is parsed properly" $- recordAesCheck- "{\"base\":\"568.7\", \"counter\":3764.2,\"creation_timestamp\":478873467, \- \ \"expiration_timestamp\":8768834222, \"completed_timestamp\":6511257825, \"fee_base\":\"3687.3\", \"fee_counter\":12.9,\- \ \"limit_price\":765.00,\"limit_volume\":55.2,\"order_id\":\"83YG\",\"pair\":\"NADXBT\",\- \ \"state\":\"COMPLETE\",\"type\":\"BID\", \"trades\":[{\"timestamp\":1431811395699, \- \ \"volume\":\"6754.09\",\"price\":\"5327.00\",\"is_buy\":false}]}"- PrivateOrderWithTrades- {privateOrderWithTradesBase = 568.7,- privateOrderWithTradesCounter = 3764.2,- privateOrderWithTradesCreationTimestamp = posixSecondsToUTCTime 478873.467,- privateOrderWithTradesExpirationTimestamp = posixSecondsToUTCTime 8768834.222,- privateOrderWithTradesCompletedTimestamp = posixSecondsToUTCTime 6511257.825,- privateOrderWithTradesFeeBase = 3687.3,- privateOrderWithTradesFeeCounter = 12.9,- privateOrderWithTradesLimitPrice = 765,- privateOrderWithTradesLimitVolume = 55.2,- privateOrderWithTradesId = "83YG",- privateOrderWithTradesPair = NADXBT,- privateOrderWithTradesState = COMPLETE,- privateOrderWithTradesOrderType = BID,- privateOrderWithTradesTrades = [tradeInner]} it "WithdrawalRequest is parsed properly" $ recordAesCheck "{\"status\":\"PENDING\", \"id\":\"7yrfU4987\"}"@@ -178,6 +156,29 @@ \ \"account_id\":\"3485527347968330182\", \"balance_delta\":0.0399, \ \ \"available_delta\":0.0099, \"currency\":\"XBT\",\"description\":\"Bought BTC 0.01 for R 79.00\"}]}" [transactionInner]+ it "PrivateTrade is parsed properly" $+ recordAesCheck+ "{\"base\": \"0.147741\", \"counter\": \"1549.950831\", \"fee_base\": \"0.90\", \"fee_counter\": \"0.00\", \+ \ \"is_buy\": false, \"order_id\": \"BXMC2CJ7HNB88U4\", \"pair\": \"XBTZAR\", \"price\": \"10491.00\", \+ \ \"timestamp\": 1467138492909, \"type\": \"BID\", \"volume\": \"0.147741\" }"+ PrivateTrade+ {privateTradeBase = 0.147741,+ privateTradeCounter = 1549.950831,+ privateTradeFeeBase = 0.9,+ privateTradeFeeCounter = 0,+ privateTradeIsBuy = False,+ privateTradeOrderId = "BXMC2CJ7HNB88U4",+ privateTradePair = XBTZAR,+ privateTradePrice = 10491,+ privateTradeTimestamp = posixSecondsToUTCTime 1467138492.909,+ privateTradeOrderType = BID,+ privateTradeVolume = 0.147741}+ it "PrivateTrades is parsed properly" $+ recordAesCheck+ "{\"trades\":[{\"base\": \"0.147741\", \"counter\": \"1549.950831\", \"fee_base\": \"0.90\", \"fee_counter\": \"0.00\", \+ \ \"is_buy\": false, \"order_id\": \"BXMC2CJ7HNB88U4\", \"pair\": \"XBTZAR\", \"price\": \"10491.00\", \+ \ \"timestamp\": 1467138492909, \"type\": \"BID\", \"volume\": \"0.147741\" }]}"+ [privateTradeInner] tickerInner :: Ticker tickerInner =@@ -228,3 +229,18 @@ transactionAvailableDelta = 0.0099, transactionCurrency = XBT, transactionDescription = "Bought BTC 0.01 for R 79.00"}++privateTradeInner :: PrivateTrade+privateTradeInner =+ PrivateTrade+ {privateTradeBase = 0.147741,+ privateTradeCounter = 1549.950831,+ privateTradeFeeBase = 0.9,+ privateTradeFeeCounter = 0,+ privateTradeIsBuy = False,+ privateTradeOrderId = "BXMC2CJ7HNB88U4",+ privateTradePair = XBTZAR,+ privateTradePrice = 10491,+ privateTradeTimestamp = posixSecondsToUTCTime 1467138492.909,+ privateTradeOrderType = BID,+ privateTradeVolume = 0.147741}
test/Network/Bitcoin/BitX/Spec/Specs/LensSpec.hs view
@@ -88,25 +88,6 @@ let _ = x ^. BitX.completedTimestamp Nothing -_privateOrderWithTrades :: Maybe Int-_privateOrderWithTrades = do- let x = BitX.PrivateOrderWithTrades 0 0 (posixSecondsToUTCTime 0) (posixSecondsToUTCTime 0) (posixSecondsToUTCTime 0) 0 0 0 0 "" XBTZAR PENDING ASK [BitX.Trade (posixSecondsToUTCTime 0) 0 0 False]- let _ = x ^. BitX.base- let _ = x ^. BitX.counter- let _ = x ^. BitX.creationTimestamp- let _ = x ^. BitX.feeBase- let _ = x ^. BitX.feeCounter- let _ = x ^. BitX.limitPrice- let _ = x ^. BitX.limitVolume- let _ = x ^. BitX.id- let _ = x ^. BitX.pair- let _ = x ^. BitX.state- let _ = x ^. BitX.orderType- let _ = x ^. BitX.expirationTimestamp- let _ = x ^. BitX.completedTimestamp- let _ = x ^. BitX.trades- Nothing- _transaction :: Maybe Int _transaction = do let x = BitX.Transaction 0 (posixSecondsToUTCTime 0) 0 0 0 0 ZAR ""@@ -193,3 +174,20 @@ let _ = x ^. BitX.status let _ = x ^. BitX.id Nothing++_privateTrade :: Maybe Int+_privateTrade = do+ let x = BitX.PrivateTrade 0 0 0 0 True "" XBTZAR 0 (posixSecondsToUTCTime 0) BID 0+ let _ = x ^. BitX.base+ let _ = x ^. BitX.counter+ let _ = x ^. BitX.feeBase+ let _ = x ^. BitX.feeCounter+ let _ = x ^. BitX.isBuy+ let _ = x ^. BitX.orderId+ let _ = x ^. BitX.pair+ let _ = x ^. BitX.price+ let _ = x ^. BitX.timestamp+ let _ = x ^. BitX.orderType+ let _ = x ^. BitX.volume+ Nothing+