bitx-bitcoin 0.8.0.0 → 0.9.0.0
raw patch · 12 files changed
+64/−50 lines, 12 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_0Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_0CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_0OrderType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_0QuoteType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_0RequestStatus
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_0WithdrawalType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_10CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_11CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_12CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_13CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_1Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_1CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_1OrderType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_1QuoteType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_1RequestStatus
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_1WithdrawalType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_2Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_2CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_2RequestStatus
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_2WithdrawalType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_3Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_3CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_3WithdrawalType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_4Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_4CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_4WithdrawalType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_5Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_5CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_6Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_6CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_7Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_7CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_8CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Constructor Network.Bitcoin.BitX.Types.C1_9CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Datatype Network.Bitcoin.BitX.Types.D1Asset
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Datatype Network.Bitcoin.BitX.Types.D1CcyPair
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Datatype Network.Bitcoin.BitX.Types.D1OrderType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Datatype Network.Bitcoin.BitX.Types.D1QuoteType
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Datatype Network.Bitcoin.BitX.Types.D1RequestStatus
- Network.Bitcoin.BitX.Types: instance GHC.Generics.Datatype Network.Bitcoin.BitX.Types.D1WithdrawalType
+ Network.Bitcoin.BitX: type family Aes recd;
+ Network.Bitcoin.BitX: }
- Network.Bitcoin.BitX: class FromJSON (Aes recd) => BitXAesRecordConvert recd where type family Aes recd
+ Network.Bitcoin.BitX: class FromJSON (Aes recd) => BitXAesRecordConvert recd where type Aes recd where {
- Network.Bitcoin.BitX.Private: getFundingAddress :: BitXAuth -> Asset -> Maybe String -> IO (BitXAPIResponse FundingAddress)
+ Network.Bitcoin.BitX.Private: getFundingAddress :: BitXAuth -> Asset -> Maybe Text -> IO (BitXAPIResponse FundingAddress)
- Network.Bitcoin.BitX.Response: UnparseableResponse :: String -> (Response ByteString) -> BitXAPIResponse recd
+ Network.Bitcoin.BitX.Response: UnparseableResponse :: Text -> (Response Text) -> BitXAPIResponse recd
Files
- CHANGES +3/−0
- LICENSE +1/−1
- bitx-bitcoin.cabal +1/−1
- src/Network/Bitcoin/BitX.hs +1/−1
- src/Network/Bitcoin/BitX/Internal.hs +20/−15
- src/Network/Bitcoin/BitX/Private.hs +8/−8
- src/Network/Bitcoin/BitX/Private/Order.hs +7/−6
- src/Network/Bitcoin/BitX/Private/Quote.hs +5/−4
- src/Network/Bitcoin/BitX/Private/Withdrawal.hs +3/−2
- src/Network/Bitcoin/BitX/Public.hs +8/−5
- src/Network/Bitcoin/BitX/Response.hs +6/−6
- src/Network/Bitcoin/BitX/Types.hs +1/−1
CHANGES view
@@ -1,3 +1,6 @@+v0.9.0.0+* Use (strict) Text consistantly instead of random string-like types. BREAKING CHANGE.+ v0.8.0.0 * Added Singapore Dollar. * The UnparseableResponse now provides the Aeson error. BREAKING CHANGE.
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2015, Tebello Thejane+Copyright (c) 2016, Tebello Thejane All rights reserved.
bitx-bitcoin.cabal view
@@ -1,5 +1,5 @@ name: bitx-bitcoin-version: 0.8.0.0+version: 0.9.0.0 synopsis: A Haskell library for working with the BitX bitcoin exchange. description:
src/Network/Bitcoin/BitX.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>
src/Network/Bitcoin/BitX/Internal.hs view
@@ -15,18 +15,23 @@ import Network.Bitcoin.BitX.Types.Internal import qualified Network.HTTP.Client as NetCon import qualified Network.HTTP.Client.TLS as NetCon-import Network.HTTP.Types (status503)+import Network.HTTP.Types.Status (status503, status429) import Network.HTTP.Client (Response(..), Request(..)) import Control.Exception (try) import qualified Data.Aeson as Aeson (decode, eitherDecode) import qualified Data.ByteString.Lazy as BL+import Data.ByteString.Lazy (toStrict) import qualified Data.ByteString as BS import Data.Maybe (fromJust) import Network (withSocketsDo) import qualified Data.Text.Encoding as Txt+import qualified Data.Text as Txt import Network.Bitcoin.BitX.Response import Lens.Micro ((^.)) import Control.Concurrent (threadDelay)+import Data.Text (Text, pack)+import Data.Text.Encoding (decodeUtf8)+import Data.Monoid ((<>)) #if __GLASGOW_HASKELL__ >= 710 -- <$> is in base since 4.8 (GHC 7.10) due to the AMP import Control.Applicative ((<|>))@@ -34,11 +39,11 @@ import Control.Applicative ((<|>), (<$>)) #endif -bitXAPIPrefix :: String+bitXAPIPrefix :: Text bitXAPIPrefix = "https://api.mybitx.com/api/" -bitXAPIRoot :: String-bitXAPIRoot = bitXAPIPrefix ++ "1/"+bitXAPIRoot :: Text+bitXAPIRoot = bitXAPIPrefix <> "1/" globalManager :: IO NetCon.Manager globalManager = NetCon.newManager NetCon.tlsManagerSettings@@ -51,34 +56,34 @@ userID = Txt.encodeUtf8 (auth ^. Types.id) userSecret = Txt.encodeUtf8 (auth ^. Types.secret) -simpleBitXGetAuth_ :: BitXAesRecordConvert recd => BitXAuth -> String -> IO (BitXAPIResponse recd)+simpleBitXGetAuth_ :: BitXAesRecordConvert recd => BitXAuth -> Text -> IO (BitXAPIResponse recd) simpleBitXGetAuth_ auth verb = withSocketsDo $ rateLimit (authConnect auth- . fromJust . NetCon.parseUrl $ (bitXAPIRoot ++ verb))+ . fromJust . NetCon.parseUrl $ Txt.unpack (bitXAPIRoot <> verb)) consumeResponseIO simpleBitXPOSTAuth_ :: (BitXAesRecordConvert recd, POSTEncodeable inprec) => BitXAuth -> inprec- -> String -> IO (BitXAPIResponse recd)+ -> Text -> IO (BitXAPIResponse recd) simpleBitXPOSTAuth_ auth encrec verb = withSocketsDo $ rateLimit (authConnect auth . NetCon.urlEncodedBody (postEncode encrec)- . fromJust . NetCon.parseUrl $ (bitXAPIRoot ++ verb))+ . fromJust . NetCon.parseUrl $ Txt.unpack (bitXAPIRoot <> verb)) consumeResponseIO simpleBitXMETHAuth_ :: BitXAesRecordConvert recd => BitXAuth -> BS.ByteString- -> String -> IO (BitXAPIResponse recd)+ -> Text -> IO (BitXAPIResponse recd) simpleBitXMETHAuth_ auth meth verb = withSocketsDo $ rateLimit- (authConnect auth (fromJust (NetCon.parseUrl (bitXAPIRoot ++ verb))) { method = meth })+ (authConnect auth (fromJust (NetCon.parseUrl $ Txt.unpack (bitXAPIRoot <> verb))) { method = meth }) consumeResponseIO -simpleBitXGet_ :: BitXAesRecordConvert recd => String -> IO (BitXAPIResponse recd)+simpleBitXGet_ :: BitXAesRecordConvert recd => Text -> IO (BitXAPIResponse recd) simpleBitXGet_ verb = withSocketsDo $ do manager <- globalManager rateLimit- (try . flip NetCon.httpLbs manager . fromJust . NetCon.parseUrl $ (bitXAPIRoot ++ verb))+ (try . flip NetCon.httpLbs manager . fromJust . NetCon.parseUrl $ Txt.unpack (bitXAPIRoot <> verb)) consumeResponseIO rateLimit :: IO (Either NetCon.HttpException c) -> (Either NetCon.HttpException c -> IO d) -> IO d@@ -107,9 +112,9 @@ bitXErrorOrPayload resp = fromJust $ ErrorResponse . aesToRec <$> Aeson.decode body -- is it a BitX error? <|> ValidResponse . aesToRec <$> eitherToMaybe respBody -- I can't get the typechecker to work if I use "Aeson.decode body" here- <|> Just (UnparseableResponse aesonErr resp)+ <|> Just (UnparseableResponse aesonErr $ fmap (decodeUtf8 . toStrict) resp) where- aesonErr = fromLeft respBody+ aesonErr = pack $ fromLeft respBody respBody = Aeson.eitherDecode body body = NetCon.responseBody resp @@ -122,5 +127,5 @@ eitherToMaybe (Right b) = Just b isRateLimited :: Either NetCon.HttpException a -> Bool-isRateLimited (Left (NetCon.StatusCodeException st _ _)) = st == status503+isRateLimited (Left (NetCon.StatusCodeException st _ _)) = st == status503 || st == status429 isRateLimited _ = False
src/Network/Bitcoin/BitX/Private.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX.Private--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>@@ -72,13 +72,13 @@ import Network.Bitcoin.BitX.Types import Network.Bitcoin.BitX.Types.Internal import qualified Data.Text as Txt-import Control.Monad (liftM) import Network.Bitcoin.BitX.Response import Network.Bitcoin.BitX.Private.Order --import Network.Bitcoin.BitX.Private.Auth import Network.Bitcoin.BitX.Private.Quote import Network.Bitcoin.BitX.Private.Withdrawal+import Data.Monoid ((<>)) {-# ANN module ("HLint: ignore Use import/export shortcut" :: String) #-} @@ -112,12 +112,12 @@ @Perm_R_Addresses@ permission is required. -} -getFundingAddress :: BitXAuth -> Asset -> Maybe String -> IO (BitXAPIResponse FundingAddress)+getFundingAddress :: BitXAuth -> Asset -> Maybe Txt.Text -> IO (BitXAPIResponse FundingAddress) getFundingAddress auth fasset addr = simpleBitXGetAuth_ auth url where- url = "funding_address?asset=" ++ show fasset ++ case addr of+ url = "funding_address?asset=" <> Txt.pack (show fasset) <> case addr of Nothing -> ""- Just ad -> "&address=" ++ ad+ Just ad -> "&address=" <> ad {- | Create receive address @@ -164,7 +164,7 @@ -> Int -- ^ Last row returned, exclusive -> IO (BitXAPIResponse [Transaction]) getTransactions auth accid minr maxr = simpleBitXGetAuth_ auth $- "accounts/" ++ Txt.unpack accid ++ "/transactions?min_row=" ++ show minr ++ "&max_row=" ++ show maxr+ "accounts/" <> accid <> "/transactions?min_row=" <> Txt.pack (show minr) <> "&max_row=" <> Txt.pack (show maxr) {- | Pending transactions @@ -177,8 +177,8 @@ -} getPendingTransactions :: BitXAuth -> AccountID -> IO (BitXAPIResponse [Transaction])-getPendingTransactions auth accid = liftM imebPendingTransactionsToimebTransactions $ simpleBitXGetAuth_ auth $- "accounts/" ++ Txt.unpack accid ++ "/pending"+getPendingTransactions auth accid = fmap imebPendingTransactionsToimebTransactions $ simpleBitXGetAuth_ auth $+ "accounts/" <> accid <> "/pending" where imebPendingTransactionsToimebTransactions (ValidResponse v) = ValidResponse $ pendingTransactionsToTransactions v imebPendingTransactionsToimebTransactions (ExceptionResponse x) = ExceptionResponse x
src/Network/Bitcoin/BitX/Private/Order.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX.Private.Order--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>@@ -32,6 +32,7 @@ import Network.Bitcoin.BitX.Types import qualified Data.Text as Txt import Network.Bitcoin.BitX.Response+import Data.Monoid ((<>)) {- | Returns a list of the most recently placed orders. @@ -49,11 +50,11 @@ getAllOrders :: BitXAuth -> Maybe CcyPair -> Maybe RequestStatus -> IO (BitXAPIResponse [PrivateOrder]) getAllOrders auth cpair stat = simpleBitXGetAuth_ auth url where- url = "listorders" ++ case (cpair, stat) of+ url = "listorders" <> case (cpair, stat) of (Nothing, Nothing) -> ""- (Just pr, Nothing) -> "?pair=" ++ show pr- (Nothing, Just st) -> "?state=" ++ show st- (Just pr, Just st) -> "?pair=" ++ show pr ++ "&state=" ++ show st+ (Just pr, Nothing) -> "?pair=" <> Txt.pack (show pr)+ (Nothing, Just st) -> "?state=" <> Txt.pack (show st)+ (Just pr, Just st) -> "?pair=" <> Txt.pack (show pr) <> "&state=" <> Txt.pack (show st) {- | Create a new order. @@ -80,7 +81,7 @@ -} getOrder :: BitXAuth -> OrderID -> IO (BitXAPIResponse PrivateOrderWithTrades)-getOrder auth oid = simpleBitXGetAuth_ auth $ "orders/" ++ Txt.unpack oid+getOrder auth oid = simpleBitXGetAuth_ auth $ "orders/" <> oid {- | Create a new market order.
src/Network/Bitcoin/BitX/Private/Quote.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX.Private.Quote--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>@@ -38,6 +38,7 @@ import Data.Text (Text) import qualified Data.Text as Txt import Network.Bitcoin.BitX.Response+import Data.Monoid ((<>)) {- | Create a quote @@ -70,7 +71,7 @@ -} getQuote :: BitXAuth -> Text -> IO (BitXAPIResponse OrderQuote)-getQuote auth qid = simpleBitXGetAuth_ auth $ "quotes/" ++ Txt.unpack qid+getQuote auth qid = simpleBitXGetAuth_ auth $ "quotes/" <> qid {- | Exercise a quote @@ -83,7 +84,7 @@ -} exerciseQuote :: BitXAuth -> Text -> IO (BitXAPIResponse OrderQuote)-exerciseQuote auth qid = simpleBitXMETHAuth_ auth "PUT" $ "quotes/" ++ Txt.unpack qid+exerciseQuote auth qid = simpleBitXMETHAuth_ auth "PUT" $ "quotes/" <> qid {- | Discard a quote @@ -94,4 +95,4 @@ -} discardQuote :: BitXAuth -> Text -> IO (BitXAPIResponse OrderQuote)-discardQuote auth qid = simpleBitXMETHAuth_ auth "DELETE" $ "quotes/" ++ Txt.unpack qid+discardQuote auth qid = simpleBitXMETHAuth_ auth "DELETE" $ "quotes/" <> qid
src/Network/Bitcoin/BitX/Private/Withdrawal.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX.Private.Withdrawal--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>@@ -25,6 +25,7 @@ import qualified Data.Text as Txt import Data.Text (Text) import Network.Bitcoin.BitX.Response+import Data.Monoid ((<>)) {- | List withdrawal requests @@ -52,7 +53,7 @@ getWithdrawalRequest :: BitXAuth -> Text -> IO (BitXAPIResponse WithdrawalRequest)-getWithdrawalRequest auth wthid = simpleBitXGetAuth_ auth $ "withdrawals/" ++ Txt.unpack wthid+getWithdrawalRequest auth wthid = simpleBitXGetAuth_ auth $ "withdrawals/" <> wthid --{- | Cancel a withdrawal request
src/Network/Bitcoin/BitX/Public.hs view
@@ -1,7 +1,8 @@+{-# LANGUAGE OverloadedStrings #-} ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX.Public--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>@@ -51,11 +52,13 @@ import Network.Bitcoin.BitX.Types.Internal import Network.Bitcoin.BitX.Response import Data.Time.Clock (UTCTime)+import Data.Text (pack)+import Data.Monoid ((<>)) {- | Returns the latest ticker indicators. -} getTicker :: CcyPair -> IO (BitXAPIResponse Ticker)-getTicker cyp = simpleBitXGet_ $ "ticker?pair=" ++ show cyp+getTicker cyp = simpleBitXGet_ $ "ticker?pair=" <> pack (show cyp) {- | Returns the latest ticker indicators from all active BitX exchanges. -} @@ -68,10 +71,10 @@ Note that multiple orders at the same price are not necessarily conflated. -} getOrderBook :: CcyPair -> IO (BitXAPIResponse Orderbook)-getOrderBook cyp = simpleBitXGet_ $ "orderbook?pair=" ++ show cyp+getOrderBook cyp = simpleBitXGet_ $ "orderbook?pair=" <> pack (show cyp) {- | Returns a list of the most recent trades -} getTrades :: Maybe UTCTime -> CcyPair -> IO (BitXAPIResponse [Trade])-getTrades Nothing cyp = simpleBitXGet_ $ "trades?pair=" ++ show cyp-getTrades (Just since) cyp = simpleBitXGet_ $ "trades?pair=" ++ show cyp ++ "since=" ++ 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/Response.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX.Response--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>@@ -20,8 +20,8 @@ ) where import Network.HTTP.Client (Response(..), HttpException)-import Data.ByteString.Lazy (ByteString) import Network.Bitcoin.BitX.Types+import Data.Text (Text) -- | This retun type enumerates all possible failure modes. @@ -30,9 +30,9 @@ | ErrorResponse BitXError -- ^ BitX returned an error record instead of returning the data we -- were expecting. | ValidResponse recd -- ^ We received the data type we were expecting.- | UnparseableResponse String (Response ByteString) -- ^ 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) -- ^ 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. deriving instance Show recd => Show (BitXAPIResponse recd)
src/Network/Bitcoin/BitX/Types.hs view
@@ -4,7 +4,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Network.Bitcoin.BitX.Types--- Copyright : 2015 Tebello Thejane+-- Copyright : 2016 Tebello Thejane -- License : BSD3 -- -- Maintainer : Tebello Thejane <zyxoas+hackage@gmail.com>