{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} module Network.GDAX.Implicit.Private where import Control.Lens hiding ((.=)) import Control.Monad.Catch import Control.Monad.IO.Class import Control.Monad.Reader import Data.Set (Set) import Data.Vector (Vector) import Network.GDAX.Core import qualified Network.GDAX.Explicit.Private as Explicit import Network.GDAX.Types.Private import Network.GDAX.Types.Shared listAccounts :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => m (Vector Account) listAccounts = do g <- (^. gdax) <$> ask Explicit.listAccounts g getAccount :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => AccountId -> m Account getAccount aid = do g <- (^. gdax) <$> ask Explicit.getAccount g aid getAccountHistory :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => AccountId -> m (Vector Entry) getAccountHistory aid = do g <- (^. gdax) <$> ask Explicit.getAccountHistory g aid getAccountHolds :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => AccountId -> m (Vector Hold) getAccountHolds aid = do g <- (^. gdax) <$> ask Explicit.getAccountHolds g aid placeOrder :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => NewOrder -> m NewOrderConfirmation placeOrder no = do g <- (^. gdax) <$> ask Explicit.placeOrder g no placeLimitOrder :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => NewLimitOrder -> m NewOrderConfirmation placeLimitOrder no = do g <- (^. gdax) <$> ask Explicit.placeLimitOrder g no placeMarketOrder :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => NewMarketOrder -> m NewOrderConfirmation placeMarketOrder no = do g <- (^. gdax) <$> ask Explicit.placeMarketOrder g no placeStopOrder :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => NewStopOrder -> m NewOrderConfirmation placeStopOrder no = do g <- (^. gdax) <$> ask Explicit.placeStopOrder g no cancelOrder :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => OrderId -> m () cancelOrder oid = do g <- (^. gdax) <$> ask Explicit.cancelOrder g oid cancelAllOrders :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => ProductId -> m (Vector OrderId) cancelAllOrders pid = do g <- (^. gdax) <$> ask Explicit.cancelAllOrders g pid listOrders :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => Set ProductId -> Set OrderStatus -> m (Vector Order) listOrders pids oss = do g <- (^. gdax) <$> ask Explicit.listOrders g pids oss getOrder :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => OrderId -> m Order getOrder oid = do g <- (^. gdax) <$> ask Explicit.getOrder g oid listFills :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => Set OrderId -> Set ProductId -> m (Vector Fill) listFills oids pids = do g <- (^. gdax) <$> ask Explicit.listFills g oids pids listFundings :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => Set FundingStatus -> m (Vector Funding) listFundings fs = do g <- (^. gdax) <$> ask Explicit.listFundings g fs repayFunding :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => CurrencyId -> Double -> m () repayFunding c a = do g <- (^. gdax) <$> ask Explicit.repayFunding g c a createMarginTransfer :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => NewMarginTransfer -> m MarginTransfer createMarginTransfer nmt = do g <- (^. gdax) <$> ask Explicit.createMarginTransfer g nmt getPosition :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => m Position getPosition = do g <- (^. gdax) <$> ask Explicit.getPosition g closePosition :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => Explicit.RepayOnly -> m () closePosition r = do g <- (^. gdax) <$> ask Explicit.closePosition g r deposit :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => Deposit -> m DepositReceipt deposit d = do g <- (^. gdax) <$> ask Explicit.deposit g d depositCoinbase :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => CoinbaseDeposit -> m CoinbaseDepositReceipt depositCoinbase d = do g <- (^. gdax) <$> ask Explicit.depositCoinbase g d withdraw :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => Withdraw -> m WithdrawReceipt withdraw w = do g <- (^. gdax) <$> ask Explicit.withdraw g w withdrawCoinbase :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => CoinbaseWithdraw -> m CoinbaseWithdrawReceipt withdrawCoinbase w = do g <- (^. gdax) <$> ask Explicit.withdrawCoinbase g w withdrawCrypto :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => CryptoWithdraw -> m CryptoWithdrawReceipt withdrawCrypto w = do g <- (^. gdax) <$> ask Explicit.withdrawCrypto g w listPaymentMethods :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => m (Vector PaymentMethod) listPaymentMethods = do g <- (^. gdax) <$> ask Explicit.listPaymentMethods g listCoinbaseAccounts :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => m (Vector CoinbaseAccount) listCoinbaseAccounts = do g <- (^. gdax) <$> ask Explicit.listCoinbaseAccounts g createReport :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => NewReport -> m Report createReport nr = do g <- (^. gdax) <$> ask Explicit.createReport g nr getReport :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => ReportId -> m Report getReport rid = do g <- (^. gdax) <$> ask Explicit.getReport g rid listTrailingVolume :: (MonadIO m, MonadThrow m, MonadReader e m, HasGdax e) => m (Vector TrailingVolume) listTrailingVolume = do g <- (^. gdax) <$> ask Explicit.listTrailingVolume g