J;H      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGportable provisionalDon Stewart <dons@galois.com>As can association lists =Strings can be represented a little more efficiently in JSON  JSON values 1The type to which we encode Haskell values. There's a set ? of primitives, and a couple of heterogenous collection types.  Objects: ?An object structure is represented as a pair of curly brackets  surrounding zero or more name/'value pairs (or members). A name is a D string. A single colon comes after each name, separating the name : from the value. A single comma separates a value from a  following name. Arrays: AAn array structure is represented as square brackets surrounding G zero or more values (or elements). Elements are separated by commas. ,Only valid JSON can be constructed this way  *Turn a Haskell string into a JSON string. -Make JSON object out of an association list.      portable provisionalDon Stewart <dons@galois.com> EHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  portable provisionalDon Stewart <dons@galois.com> Parsing JSON $The type of JSON parsers for String DRun a JSON reader on an input String, returning some Haskell value.  All input will be consumed. )Find 8 chars context, for error messages Read the JSON null type Read the JSON Bool type Read the JSON String type ?Read an Integer or Double in JSON format, returning a Rational Read a list in JSON format Read an object in JSON format Read a sequence of items (Read a sequence of JSON labelled fields &Read one of several possible JS types !-Top level JSON can only be Arrays or Objects " Writing JSON 7Show strict JSON top level types. Values not permitted 4 at the top level are wrapped in a singleton array. #Show JSON values $Write the JSON null type %Write the JSON Bool type Write the JSON String type &Show a Rational in JSON format 'Show a list in JSON format ((Show an association list in JSON format 0Show a generic sequence of pairs in JSON format 'Show a generic sequence in JSON format  !"#$%&'( !$%&'(#" !"#$%&'(portable provisionalDon Stewart <dons@galois.com>)*+,-./01,)*+,-./01 )*+,-./01 )*+,-./01portable provisionalDon Stewart <dons@galois.com>23456789:a     23456789: 23456789: 23456789:portable provisionalDon Stewart <dons@galois.com>;A type for parser results <=>1The class of types serialisable to and from JSON ?@ABC+Decode a String representing a JSON value / (either an object, array, bool, number, null) 0This is a superset of JSON, as types other than 0 Array and Object are allowed at the top level. D6Encode a Haskell value into a string, in JSON format. 0This is a superset of JSON, as types other than 0 Array and Object are allowed at the top level. E2Decode a String representing a strict JSON value. / This follows the spec, and requires top level & JSON types to be an Array or Object. F2Encode a value as a String in strict JSON format. 0 This follows the spec, and requires all values > at the top level to be wrapped in either an Array or Object. & JSON types to be an Array or Object. GMap Results to Eithers Convenient error generation BTo ensure we generate valid JSON, we map Haskell types to JSValue % internally, then pretty print that. '  #$%&'(;<=>?@ABCDEFG) >?@AB;=<DCFE G $%&'(# ;=<<=>?@AB?@ABCDEFG       !"#$%&'()*+,-./0123456./0123456789:;<=>?@ABCDEFDEGDEHDEIDEJDEKDELDEMDENDEODEPDEQDERDESDETDEUDEVDEWDEXDEYDEZDE[DE\DE]DE^DE_DE`DEaDEbDEcDEdDEeDEfDEgDEhDEiDEjDEkDElDEmDEnDEoDEpDEqDErDEsDEtDEuDEvDEvDEwDExDEyDEzDE{DE|DE}DE~DEDEWUWUn json-0.3.3Text.JSON.TypesText.JSON.PrettyText.JSON.StringText.JSON.ReadPText.JSON.Parsec Text.JSONJSObject JSONObject fromJSObjectJSString JSONString fromJSStringJSValueJSArray JSRationalJSBoolJSNull toJSString toJSObjectpp_valuepp_null pp_boolean pp_numberpp_array pp_string pp_object pp_js_string pp_js_objectGetJSON runGetJSON readJSNull readJSBool readJSStringreadJSRational readJSArray readJSObject readJSValue readJSTopType showJSTopType showJSValue showJSNull showJSBoolshowJSRational showJSArray showJSObjectp_valuep_null p_booleanp_arrayp_stringp_objectp_number p_js_string p_js_objectResultErrorOkJSONreadJSONshowJSON readJSONs showJSONsdecodeencode decodeStrict encodeStrictresultToEitherpretty-1.0.1.1Text.PrettyPrint.HughesPJ fullRenderrender renderStylefcatfsepcatsep<+><>$+$$$nest zeroWidthTextptexttextcharisEmptyempty punctuatehangvcathsephcatbracesbracketsparens doubleQuotesquotesrationaldoublefloatintegerintrbracelbracerbracklbrackrparenlparenequalsspacecommacolonsemistyleribbonsPerLine lineLengthmodeStylePageMode ZigZagModeLeftMode OneLineModeModeDocChrStrPStr TextDetailsungetInputsetInput<$>context readSequence readAssocs showJSString showAssocs showSequencetokenpure<*>*><*<|><$baseText.ParserCombinators.ReadP readS_to_P readP_to_SmanyTillchainl1chainr1chainlchainrendBy1endBysepBy1sepBy skipMany1skipManymany1manyoptionaloptionbetweencount skipSpaceschoicemunch1munchstringeofsatisfygather<+++++pfaillookgetReadSReadPtok parsec-3.1.0"Text.ParserCombinators.Parsec.Primtry runParserpzero"Text.ParserCombinators.Parsec.Char CharParserText.Parsec.String parseFromFileParser GenParserText.Parsec.Combinator lookAhead notFollowedByanyTokensepEndBy sepEndBy1 optionMaybeText.Parsec.CharanyCharoctDigithexDigitdigitletteralphaNumloweruppertabnewlinespacesnoneOfoneOfText.Parsec.Prim updateStatesetStategetStatesetParserStategetParserState setPosition getPosition parseTestparse tokenPrimEx tokenPrimtokenslabelslabel unexpected stateUserstatePos stateInputStateText.Parsec.ErrorerrorPos ParseErrorText.Parsec.PossetSourceColumn setSourceLine setSourceNameincSourceColumn incSourceLine sourceColumn sourceLine sourceName SourceNameLineColumn SourcePosmkErrorsecond $fJSONJSValue