generic-xmlpickler: Generic generation of HXT XmlPickler instances using GHC Generics.

[ bsd3, data, library, xml ] [ Propose Tags ]
Change log
Dependencies base (>=4.5 && <4.11), generic‑deriving (>=1.6 && <1.13), ghc‑prim (>=0.2 && <0.5), hxt (>=9.2 && <9.4), text [details]
License BSD-3-Clause
Copyright (c) 2015, Silk
Author Silk
Revised Revision 6 made by AdamBergmark at Thu Jan 25 20:36:09 UTC 2018
Category XML, Data
Home page
Source repo head: git clone
Uploaded by ErikHesselink at Mon Feb 29 21:43:48 UTC 2016
Distributions LTSHaskell:, NixOS:, openSUSE:
Downloads 3045 total (19 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2016-02-29 [all 1 reports]
Hackage Matrix CI

Generic generation of HXT XmlPickler instances using GHC Generics.

[Skip to Readme]




Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees

Readme for generic-xmlpickler-

[back to package description]


Build Status

This package allows you to automatically derive hxt picklers (conversions to and from xml) using GHC Generics. It has been ported from regular-xmlpickler

A simple example:

{-# LANGUAGE DeriveGeneric #-}

import GHC.Generics
import Data.Maybe (listToMaybe)
import Generics.XmlPickler (gxpickle)
import Text.XML.HXT.Arrow.Pickle (XmlPickler (..), showPickled, unpickleDoc)
import Text.XML.HXT.Parser.XmlParsec (xread)

data User = User
  { name  :: String
  , admin :: Bool
  } deriving (Show, Generic)

instance XmlPickler User where
  xpickle = gxpickle

userString :: String
userString = showPickled [] (User "Simon" True)
-- = "<user><name>Simon</name><admin>true</admin></user>"

user :: Maybe User
user = unpickleDoc xpickle =<< listToMaybe (xread "<user><name>Simon</name><admin>true</admin></user>")
-- = Just (User {name = "Simon", admin = True})