on 0.8.0.0 help sign in
30 lines 858 B history raw
1{-# LANGUAGE OverloadedStrings #-}
3import Control.Applicative ((<$>), (<*>), empty)
4import Data.Aeson
5import qualified Data.ByteString.Lazy.Char8 as BL
7data Coord = Coord { x :: Double, y :: Double }
8 deriving (Show)
10-- A ToJSON instance allows us to encode a value as JSON.
12instance ToJSON Coord where
13 toJSON (Coord xV yV) = object [ "x" .= xV,
14 "y" .= yV ]
16-- A FromJSON instance allows us to decode a value from JSON. This
17-- should match the format used by the ToJSON instance.
19instance FromJSON Coord where
20 parseJSON (Object v) = Coord <$>
21 v .: "x" <*>
22 v .: "y"
23 parseJSON _ = empty
25main :: IO ()
26main = do
27 let req = decode "{\"x\":3.0,\"y\":-1.0}" :: Maybe Coord
28 print req
29 let reply = Coord 123.4 20
30 BL.putStrLn (encode reply)