Blame examples/TemplateHaskell.hs

Packit 9a2dfb
-- We can use Template Haskell (TH) to generate instances of the
Packit 9a2dfb
-- FromJSON and ToJSON classes automatically.  This is the fastest way
Packit 9a2dfb
-- to add JSON support for a type.
Packit 9a2dfb
{-# LANGUAGE OverloadedStrings #-}
Packit 9a2dfb
{-# LANGUAGE TemplateHaskell #-}
Packit 9a2dfb
Packit 9a2dfb
module Main (main) where
Packit 9a2dfb
Packit 9a2dfb
import Prelude ()
Packit 9a2dfb
import Prelude.Compat
Packit 9a2dfb
Packit 9a2dfb
import Data.Aeson (decode, encode)
Packit 9a2dfb
import Data.Aeson.TH (deriveJSON, defaultOptions)
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
-- This splice will derive instances of ToJSON and FromJSON for us.
Packit 9a2dfb
Packit 9a2dfb
$(deriveJSON defaultOptions ''Coord)
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 { x = 123.4, y = 20 }
Packit 9a2dfb
  BL.putStrLn (encode reply)