{-# LANGUAGE OverloadedStrings, RecordWildCards #-} import qualified Jsonifier as J import qualified Data.ByteString.Char8 {-| Outputs the following: > {"name":"Metallica","genres":[{"name":"Metal"},{"name":"Rock"},{"name":"Blues"}]} -} main = Data.ByteString.Char8.putStrLn (J.toByteString (artistJson metallica)) metallica :: Artist metallica = Artist "Metallica" [Genre "Metal", Genre "Rock", Genre "Blues"] -- * Model ------------------------- data Artist = Artist { artistName :: Text, artistGenres :: [Genre] } data Genre = Genre { genreName :: Text } -- * Encoders ------------------------- artistJson :: Artist -> J.Json artistJson Artist{..} = J.object [ ("name", J.textString artistName), ("genres", J.array (fmap genreJson artistGenres)) ] genreJson :: Genre -> J.Json genreJson Genre{..} = J.object [ ("name", J.textString genreName) ]