on 0.6.0.0 help sign in
38 lines 1.2 kB history raw
1-- This example is basically the same as in Simplest.hs, only it uses
2-- GHC's builtin generics instead of explicit instances of ToJSON and
3-- FromJSON.
5-- This example only works with GHC 7.2 or newer, as it uses the
6-- datatype-generic programming machinery introduced in 7.2.
8-- We enable the DeriveGeneric language extension so that GHC can
9-- automatically derive the Generic class for us.
11{-# LANGUAGE DeriveGeneric #-}
13{-# LANGUAGE OverloadedStrings #-}
15import Data.Aeson (FromJSON, ToJSON, decode, encode)
16import qualified Data.ByteString.Lazy.Char8 as BL
18-- To decode or encode a value using the generic machinery, we must
19-- make the type an instance of the Generic class.
21import GHC.Generics (Generic)
23data Coord = Coord { x :: Double, y :: Double }
24 deriving (Show, Generic)
26-- While we still have to declare our type as instances of FromJSON
27-- and ToJSON, we do *not* need to provide bodies for the instances.
28-- Default versions will be supplied for us.
30instance FromJSON Coord
31instance ToJSON Coord
33main :: IO ()
34main = do
35 let req = decode "{\"x\":3.0,\"y\":-1.0}" :: Maybe Coord
36 print req
37 let reply = Coord 123.4 20
38 BL.putStrLn (encode reply)