úÎ4Ë/ýO      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN  OPQRSTU    VWXYZ[monadic serialization & deserialization ,  !"#$%&'()*+,-./0123456,  +,0/.-123456 !"#$&%(*')  78@shows the content of a expression, must be defined bu the user 97read the content of a expression, must be user defined :;6insert a reference (a variable in the where section). <=.return the serialized list of variable values d useful for delayed deserialzation of expresions, in case of dynamic variables were deserialization 2 is done when needed, once the type is known with E >.use the rshowp parser to serialize the object   rShow c= runW $ rshowp c ?&deserialize trough the rreadp parser   rRead str= runR rreadp $ str @ABGif a is an instance of Show, showpText can be used as the showp method M the drawback is that the data inside is not inspected for common references W so it is recommended to create your own readp method for your complex data structures CGif a is an instance of Read, readpText can be used as the readp method M the drawback is that the data inside is not inspected for common references W so it is recommended to create your own readp method for your complex data structures D'deserialize the string with the parser EQread an expression with the variables definedd in a context passed as parameter. Fserialize x with the parser G-output the string of the serialized variable HLinsert a variable at this position. The expression value is inserted in the where section if it is not already c created. If the address of this object being parsed correspond with an address already parsed and A it is in the where section, then the same variable name is used  6runW showp (1::Int) -> 1 G runW (insertVar showp) (1::Int) -> v1 where { v1=1} & runW (insertVar showp) [(1::Int) ,1] -> [v1.v1] where { v1=1} ; This is useful when the object is referenced many times \<inform if the expression iwas already referenced and return  Right varname N otherwise, add the expresion to the context and giive it a name and return  Left varname S The varname is not added to the serialized expression. The user must serialize it e This is usefu for expressions that admit different syntax depending or recursiviity, such are lists IQdeserialize a variable serialized with insertVar. Memory references are restored JVWrite a String in the serialized output with an added whitespace. Deserializable with 4 K2Write a char in the serialized output (no spaces) L1serialize a variable which has a Binary instance M%deserialize a variable serialized by L N]defualt instances F  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN789:;<GBCNLMJK>?HI DEF@A=78989:;<=>?@ABCDEFGHIJKLMN^       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_RefSerialize-0.2.8Data.RefSerialize.SerializeData.RefSerializeData.RefSerialize.ParserStatErrorContextShowFVarNameMFun readContextvarNamenumVarST<|>charanyCharupperspacedigitoneOfnoneOfsepBybetweenchoiceoption notFollowedBymanyTillstringboolmanyparensbracesanglesbracketssemicommadotcoloncommaSepsemiSep commaSep1semiSep1 charLiteral stringLiteralnaturalOrFloatfloatintegernaturaldecimal hexadecimaloctalsymbollexeme whiteSpace Serializeshowpreadp newContextrshowprreadp getContextrShowrReadreadHexpshowHexp showpText readpTextrunRrunRCrunWshowps insertVarreadVar insertString insertChar showpBinary readpBinarytakepemptyassocsinsertlookuptoListfromListhasht parsecPluslabellabelssepBy1many1 $fMonadSTisInVars $fSerializea