]Je      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(c) Galois, Inc. 2007-2009BSD3Sigbjorn Finne <sof@galois.com> provisionalportableSafe1As can association lists<Strings can be represented a little more efficiently in JSON JSON valuesxThe 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 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:An array structure is represented as square brackets surrounding 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.&Get the value of a field, if it exist.;Set the value of a field. Previous values are overwritten.    (c) Galois, Inc. 2007-2009BSD3Sigbjorn Finne <sof@galois.com> provisionalportableSafe( Parsing JSON#The type of JSON parsers for String `Run 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 formatRead 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 JSONjShow strict JSON top level types. Values not permitted at the top level are wrapped in a singleton array.*Show JSON values+Write the JSON null type,Write the JSON Bool typeWrite the JSON String type-Show a Rational in JSON format/Show a list in JSON format0'Show an association list in JSON format/Show a generic sequence of pairs in JSON format&Show a generic sequence in JSON format !"#$%&'()*+,-./0 !"#$%&'(+,/0-.*)(c) Galois, Inc. 2007-2009BSD3Sigbjorn Finne <sof@galois.com> provisionalportableSafe*7,456789:;< 456789:;<(c) Galois, Inc. 2007-2009BSD3Sigbjorn Finne <sof@galois.com> provisionalportableSafe,M=>?@ABCDE =>?@ABCDE(c) Galois, Inc. 2007-2009Sigbjorn Finne <sof@galois.com> provisionalportableSafe/Lb      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\FGHIJKLMNO FHIJKLMNOG(c) Galois, Inc. 2007-2009BSD3Sigbjorn Finne <sof@galois.com> provisionalportableSafe;=C P7Haskell types that can be used as keys in JSON objects.SA type for parser resultsV0The class of types serialisable to and from JSON[YDecode a String representing a JSON value (either an object, array, bool, number, null)_This is a superset of JSON, as types other than Array and Object are allowed at the top level.\5Encode a Haskell value into a string, in JSON format._This is a superset of JSON, as types other than Array and Object are allowed at the top level.]Decode a String representing a strict JSON value. This follows the spec, and requires top level JSON types to be an Array or Object.^Encode a value as a String in strict JSON format. 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._Map Results to Eithers]Convenient error generationa"Pull a value out of a JSON object.bEncode an association list as  value.c Decode a  value into an association list.fTo ensure we generate valid JSON, we map Haskell types to JSValue internally, then pretty print that./  !"#$%&'*+,-./0PQRSUTVWXYZ[\]^_`abc1 VWXYZSTU\[^]_!"#$%&'+,/-.0*`aPQRbcPQRSTUVWXYZ!(c) Lennart Augustsson, 2008-2009BSD3Sigbjorn Finne <sof@galois.com> provisionalportableNoneOIc!Convert anything to a JSON value.CConvert a JSON value to anything (fails if the types do not match).Encode a value as a string.Decode a string as a value.7  !"#$%&'*+,-./0PQRSUTVWXYZ[\]^_`abc^       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN=O>?@ABCDEPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(        !"#$%&%'%(%)%*%+%,%-%.%/%0%%%1%2%3%4%5%6%7%8%9%:%;%;%<%=%>?@?ABCBDBEBFBGBHBIBJBKBLBMBNOP!json-0.9.2-EDhkkpOfg7e6Xgs8HeyTOjText.JSON.GenericText.JSON.TypesText.JSON.StringText.JSON.ReadPText.JSON.PrettyText.JSON.Parsec Text.JSONbase Data.DataDataData.Typeable.InternalTypeableJSObject JSONObject fromJSObjectJSString JSONString fromJSStringJSValueJSNullJSBool JSRationalJSArray toJSString toJSObject get_field set_field $fEqJSString $fOrdJSString$fShowJSString$fReadJSString $fEqJSObject $fOrdJSObject$fShowJSObject$fReadJSObject $fShowJSValue $fReadJSValue $fEqJSValue $fOrdJSValueGetJSON runGetJSON readJSNull readJSBool readJSStringreadJSRational readJSArray readJSObject readJSValue readJSTopType showJSTopType showJSValue showJSNull showJSBoolshowJSRationalshowJSRational' showJSArray showJSObject$fMonadGetJSON$fApplicativeGetJSON$fFunctorGetJSONp_valuep_null p_booleanp_arrayp_stringp_objectp_number p_js_string p_js_objectpp_valuepp_null pp_boolean pp_numberpp_array pp_string pp_object pp_js_string pp_js_objectp_jvalueJSKeytoJSKey fromJSKeyResultOkErrorJSONreadJSONshowJSON readJSONs showJSONsdecodeencode decodeStrict encodeStrictresultToEithermakeObj valFromObj encJSDict decJSDict $fMonadResult$fMonadPlusResult$fAlternativeResult$fApplicativeResult$fFunctorResult $fJSONText$fJSONByteString$fJSONByteString0 $fJSONIntSet $fJSONArray $fJSONSet $fJSONIntMap $fJSONMap$fJSON[] $fJSON(,,,) $fJSON(,,) $fJSON(,)$fJSON() $fJSONEither $fJSONMaybe $fJSONFloat $fJSONDouble $fJSONInt64 $fJSONInt32 $fJSONInt16 $fJSONInt8 $fJSONWord64 $fJSONWord32 $fJSONWord16 $fJSONWord8 $fJSONWord $fJSONInt $fJSONInteger$fJSONOrdering $fJSONChar $fJSONBool$fJSONJSObject$fJSONJSString $fJSONJSValue $fJSKey[] $fJSKeyInt$fJSKeyJSString $fEqResult $fShowResulttoJSONtoJSON_genericfromJSONfromJSON_generic encodeJSON decodeJSONcontext readSequence readAssocs showJSString showAssocs showSequenceunText.ParserCombinators.ReadP readS_to_P readP_to_SmanyTillchainl1chainr1chainlchainrendBy1endBysepBy1sepBy skipMany1skipManymany1manyoptionaloptionbetweencount skipSpaceschoicemunch1munchstringeofcharsatisfygather<+++++pfaillookgetReadSReadPpretty-1.1.3.3Text.PrettyPrint.HughesPJ fullRender renderStylerenderfirstfsepfcatcatsep<+><>$+$$$ punctuatehangnestvcathsephcat reduceDocmaybeDoubleQuotes maybeQuotes maybeBraces maybeBrackets maybeParensbracesbracketsparens doubleQuotesquotesrationaldoublefloatintegerintrbracelbracerbracklbrackrparenlparenequalsspacecoloncommasemiisEmptyempty zeroWidthText sizedTextptexttextDoc#Text.PrettyPrint.Annotated.HughesPJstyle TextDetailsChrStrPStrStylemode lineLengthribbonsPerLineModePageMode ZigZagModeLeftMode OneLineMode$parsec-3.1.11-Jx0X6lpzdHgC5NMoYR1Rc5"Text.ParserCombinators.Parsec.Primtry runParserpzero"Text.ParserCombinators.Parsec.Char CharParserText.Parsec.String parseFromFileParser GenParserText.Parsec.CharanyCharoctDigithexDigitdigitletteralphaNumloweruppertabnewlinespacesnoneOfoneOfText.Parsec.Combinator notFollowedByanyTokensepEndBy sepEndBy1 optionMaybeText.Parsec.Prim updateStatesetStategetStatesetParserStategetParserStatesetInput setPositiongetInput getPosition parseTestparse tokenPrimEx tokenPrimtoken lookAheadtokenslabelslabel<|> unexpectedState stateInputstatePos stateUserText.Parsec.ErrorerrorPos ParseErrorText.Parsec.PossetSourceColumn setSourceLine setSourceNameincSourceColumn incSourceLine sourceColumn sourceLine sourceName SourceNameLineColumn SourcePosmkError