Stability | experimental |
---|---|

Maintainer | Lars Petersen <info@lars-petersen.net> |

For any algebraic datatype just make it an instance of class `Data.Data.Data`

by simply deriving `Data`

on definition or try stand-alone-deriving. This
allows the library to enumerate the value constructors and thereby
encoding their index. Notice that serialisation depends on a type's
structure. Serialisations might get unreadable if the type is altered.

`getGeneric`

and `putGeneric`

implement a selection of type-specific
defaults and are grounded by a canonical serialisation for all algebraic
types that instantiate `Data`

.
Have a look at `Data.Binary.Generic.Extensions`

for details.

If you want to ground your own type-specific stack `myStack`

of extensions
write the following for the `Get`

-part (the `Put`

-part follows
analogously):

getMyStack :: Data a => Get a getMyStack = myStack (getGenericByCallback getMyStack)

# Documentation

getAlgebraic :: Data a => Get aSource

putAlgebraic :: Data a => a -> PutSource

getGeneric :: Data a => Get aSource

putGeneric :: Data a => a -> PutSource