{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE DuplicateRecordFields #-} import Data.Aeson import Data.Aeson.TH data Comment = Comment { commenter :: String , email :: String , body :: String } deriving (Eq, Show) $(deriveJSON defaultOptions 'Comment) data BlogPost = BlogPost { author :: String , title :: String , body :: String , comments :: [Comment] } deriving (Eq, Show) $(deriveJSON defaultOptions 'BlogPost) main :: IO () main = do print $ encode (BlogPost "joe" "some post" "i like turtles" [Comment "newscaster" "me@news.com" "yay turtles"])