Blame examples/Simplest.hs
|
Packit |
9a2dfb |
{-# LANGUAGE OverloadedStrings #-}
|
|
Packit |
9a2dfb |
{-# LANGUAGE RecordWildCards #-}
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
module Main (main) where
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Prelude ()
|
|
Packit |
9a2dfb |
import Prelude.Compat
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Control.Applicative (empty)
|
|
Packit |
9a2dfb |
import Data.Aeson
|
|
Packit |
9a2dfb |
import Data.Monoid
|
|
Packit |
9a2dfb |
import qualified Data.ByteString.Lazy.Char8 as BL
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
data Coord = Coord { x :: Double, y :: Double }
|
|
Packit |
9a2dfb |
deriving (Show)
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
-- A ToJSON instance allows us to encode a value as JSON.
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
instance ToJSON Coord where
|
|
Packit |
9a2dfb |
toJSON (Coord xV yV) = object [ "x" .= xV,
|
|
Packit |
9a2dfb |
"y" .= yV ]
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
toEncoding Coord{..} = pairs $
|
|
Packit |
9a2dfb |
"x" .= x <>
|
|
Packit |
9a2dfb |
"y" .= y
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
-- A FromJSON instance allows us to decode a value from JSON. This
|
|
Packit |
9a2dfb |
-- should match the format used by the ToJSON instance.
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
instance FromJSON Coord where
|
|
Packit |
9a2dfb |
parseJSON (Object v) = Coord <$>
|
|
Packit |
9a2dfb |
v .: "x" <*>
|
|
Packit |
9a2dfb |
v .: "y"
|
|
Packit |
9a2dfb |
parseJSON _ = empty
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
main :: IO ()
|
|
Packit |
9a2dfb |
main = do
|
|
Packit |
9a2dfb |
let req = decode "{\"x\":3.0,\"y\":-1.0}" :: Maybe Coord
|
|
Packit |
9a2dfb |
print req
|
|
Packit |
9a2dfb |
let reply = Coord 123.4 20
|
|
Packit |
9a2dfb |
BL.putStrLn (encode reply)
|