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)