Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

39 lines (27 sloc) 1.19 kB
-- This example is basically the same as in Simplest.hs, only it uses
-- GHC's builtin generics instead of explicit instances of ToJSON and
-- FromJSON.
-- This example only works with GHC 7.2 or newer, as it uses the
-- datatype-generic programming machinery introduced in 7.2.
-- We enable the DeriveGeneric language extension so that GHC can
-- automatically derive the Generic class for us.
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson (FromJSON, ToJSON, decode, encode)
import qualified Data.ByteString.Lazy.Char8 as BL
-- To decode or encode a value using the generic machinery, we must
-- make the type an instance of the Generic class.
import GHC.Generics (Generic)
data Coord = Coord { x :: Double, y :: Double }
deriving (Show, Generic)
-- While we still have to declare our type as instances of FromJSON
-- and ToJSON, we do *not* need to provide bodies for the instances.
-- Default versions will be supplied for us.
instance FromJSON Coord
instance ToJSON Coord
main ::IO ()
main = do
let req = decode "{\"x\":3.0,\"y\":-1.0}" :: Maybe Coord
print req
let reply = Coord 123.4 20
BL.putStrLn (encode reply)
Jump to Line
Something went wrong with that request. Please try again.