1 -- |Type for individual orders (order book entries) from the API.
2 module Cryptsy
.API
.Public
.Types
.Order
3 ( module Cryptsy
.API
.Public
.Types
.Order
4 , module Cryptsy
.API
.Public
.Types
.Num
9 import Control
.Applicative
((<$>), (<*>))
12 import Data
.Text
(pack
)
15 import Data
.Aeson
(FromJSON
(..), Value
, withObject
, (.:))
16 import Data
.Aeson
.Types
(Parser
)
19 import Cryptsy
.API
.Public
.Types
.Num
22 data GOrder p q t
= Order
29 type Order
= GOrder CryptsyNum CryptsyNum CryptsyNum
31 instance (FromJSON p
, FromJSON q
, FromJSON t
) =>
32 FromJSON
(GOrder p q t
)
34 parseJSON
= parseOrder parseJSON parseJSON parseJSON
36 -- |Combine component parsers into JSON Object parser.
37 parseOrder
:: (Value
-> Parser p
) -- ^ price parser
38 -> (Value
-> Parser q
) -- ^ quantity parser
39 -> (Value
-> Parser t
) -- ^ total parser
40 -> Value
-> Parser
(GOrder p q t
)
41 parseOrder parsePrice parseQuantity parseTotal
=
42 withObject
"Order" $ \o
-> Order
<$>
43 (o
.: pack
"price" >>= parsePrice
) <*>
44 (o
.: pack
"quantity" >>= parseQuantity
) <*>
45 (o
.: pack
"total" >>= parseTotal
)