Skip to content

Instantly share code, notes, and snippets.

@joastbg
Created October 29, 2013 12:36
Show Gist options
  • Select an option

  • Save joastbg/7213846 to your computer and use it in GitHub Desktop.

Select an option

Save joastbg/7213846 to your computer and use it in GitHub Desktop.
Haskell - Using Aeson for JSON (extended example from Aeson)
-- JSON in Haskell using Aeson
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative ((<$>), (<*>), empty)
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as BL
data Coord = Coord {
x :: Double,
y :: Double
} deriving (Show)
data Person = Person {
firstname :: String,
lastname :: String,
email :: String,
age :: Int
} deriving (Show)
-- A ToJSON instance allows us to encode a value as JSON.
instance ToJSON Coord where
toJSON (Coord xV yV) = object [ "x" .= xV, "y" .= yV ]
-- A FromJSON instance allows us to decode a value from JSON. This
-- should match the format used by the ToJSON instance.
instance ToJSON Person where
toJSON (Person fn ln em age) = object [ "firstname" .= fn, "lastname" .= ln, "email" .= em, "age" .= age ]
instance FromJSON Coord where
parseJSON (Object v) = Coord <$>
v .: "x" <*>
v .: "y"
parseJSON _ = empty
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)
let reply2 = Person "Johan" "Astborg" "johan@gecemmo.com" 29
BL.putStrLn (encode reply2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment