module ZaifExchangeAPI.Type
( ApiName
, Chart (..)
, Api (..)
, tshow
, JLastPrice (..)
, JTicker (..)
, JTrade (..)
, JTradeList (..)
, JDepth (..)
) where
import Control.Applicative ((<$>), (<*>), empty)
import Data.Aeson (FromJSON(..), Value(..), (.:))
import qualified Data.Text.Lazy as L (Text)
type ApiName = L.Text
data Chart = BtcJpy | MonaJpy | MonaBtc
data Api = LastPrice | Ticker | Trades | Depth
class TShow a where
tshow :: a -> ApiName
instance TShow Chart where
tshow BtcJpy = "btc_jpy"
tshow MonaJpy = "mona_jpy"
tshow MonaBtc = "mona_btc"
instance TShow Api where
tshow LastPrice = "last_price"
tshow Ticker = "ticker"
tshow Trades = "trades"
tshow Depth = "depth"
data JLastPrice = JLastPrice { lastprice :: Double } deriving Show
data JTicker = JTicker { last :: Double
, high :: Double
, low :: Double
, vwap :: Double
, volume :: Double
, bid :: Double
, ask :: Double
} deriving Show
data JTrade = JTrade { date :: Int
, price :: Double
, amount :: Double
, tid :: Int
, currencypair :: L.Text
, tradetype :: L.Text
} deriving Show
newtype JTradeList = JTradeList [JTrade]
instance Show JTradeList where
show (JTradeList trades) = show trades
data JDepth = JDepth { asks :: [[Double]], bids :: [[Double]] } deriving Show
instance FromJSON JLastPrice where
parseJSON (Object v) = JLastPrice <$> v .: "last_price"
parseJSON _ = empty
instance FromJSON JTicker where
parseJSON (Object v) = JTicker <$>
v .: "last" <*>
v .: "high" <*>
v .: "low" <*>
v .: "vwap" <*>
v .: "volume" <*>
v .: "bid" <*>
v .: "ask"
parseJSON _ = empty
instance FromJSON JTradeList where
parseJSON obj = JTradeList <$> parseJSON obj
instance FromJSON JTrade where
parseJSON (Object v) = JTrade <$>
v .: "date" <*>
v .: "price" <*>
v .: "amount" <*>
v .: "tid" <*>
v .: "currency_pair" <*>
v .: "trade_type"
parseJSON _ = empty
instance FromJSON JDepth where
parseJSON (Object v) = JDepth <$>
v .: "asks" <*>
v .: "bids"
parseJSON _ = empty