@hackage roundtrip-aeson0.3.0.2
Un-/parse JSON with roundtrip invertible syntax definitions.
Categories
License
BSD-3-Clause
Maintainer
Christian Marie
Links
Versions
Installation
Dependencies (11)
- aeson
- base >=4.7 && <5
- bytestring
- containers >=0.5 && <0.6
- lens
- lens-aeson Show all…
Dependents (2)
@hackage/acme-everything, @hackage/voicebase
Roundtrip Aeson
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.
Example
Using roundtrip-aeson is relatively straightforward:
-
Define your data type;
-
Define partial isomorphisms for the constructors (probably using the template haskell);
-
Describe the syntax of its JSON representation; and
-
Use that representation to build and parse JSON.
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.