Un-/parse JSON with roundtrip invertible syntax definitions.

Latest on Hackage:

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow to host generated Haddocks.

BSD3 licensed by Thomas Sutton, Christian Marie
Maintained by Anchor Engineering

Roundtrip Aeson

Build Status

roundtrip allows you to write invertible syntax descriptions -- or, to put it another way, a parser and pretty printer combined -- for String or XML data. This package extends this to support constructing and destructing JSON documents.


Using roundtrip-aeson is relatively straightforward:

  1. Define your data type;

  2. Define partial isomorphisms for the constructors (probably using the template haskell);

  3. Describe the syntax of its JSON representation; and

  4. Use that representation to build and parse JSON.

{.haskell} import Data.Aeson.RoundTrip

data Invoice = Unpaid Bool Integer Bool | Paid Double deriving (Show)

defineIsomorphisms ''Invoice

invoiceSyntax :: JsonSyntax s => s Invoice invoiceSyntax = unpaid <$> jsonField "overdue" jsonBool <> jsonField "total" jsonIntegral <> jsonField "warned" jsonBool <|> paid <$> jsonField "total" jsonRealFrac

main :: IO () main = do -- Build a JSON representation. let Right x = runBuilder invoiceSyntax $ Unpaid False 40 [False] L.putStrLn $ encode x -- Parse a JSON representation. print $ runParser invoiceSyntax x

See tests/demo.hs for the complete source of this example.

comments powered byDisqus