<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--Rendered using the Haskell Html Library v0.2--> <HTML ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE >Text.JSON.Generic</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT ><SCRIPT TYPE="text/javascript" >window.onload = function () {setSynopsis("mini_Text-JSON-Generic.html")};</SCRIPT ></HEAD ><BODY ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topbar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title" >json-0.4.4: Support for serialising Haskell to and from JSON</TD ><TD CLASS="topbut" ><A HREF="src/Text-JSON-Generic.html" >Source code</A ></TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A ></TD ><TD CLASS="topbut" ><A HREF="doc-index.html" >Index</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="modulebar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><FONT SIZE="6" >Text.JSON.Generic</FONT ></TD ><TD ALIGN="right" ><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="infohead" >Portability</TD ><TD CLASS="infoval" >portable</TD ></TR ><TR ><TD CLASS="infohead" >Stability</TD ><TD CLASS="infoval" >provisional</TD ></TR ><TR ><TD CLASS="infohead" >Maintainer</TD ><TD CLASS="infoval" >Sigbjorn Finne <sof@galois.com></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Description</TD ></TR ><TR ><TD CLASS="doc" >JSON serializer and deserializer using Data.Generics. The functions here handle algebraic data types and primitive types. It uses the same representation as <A HREF="Text-JSON.html" >Text.JSON</A > for <A HREF="Prelude.html" >Prelude</A > types. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Synopsis</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" >module <A HREF="Text-JSON.html" >Text.JSON</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >class</SPAN > <A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="#t%3AData" >Data</A > a </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >class</SPAN > <A HREF="#t%3ATypeable" >Typeable</A > a </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtoJSON" >toJSON</A > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => a -> <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfromJSON" >fromJSON</A > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A > -> <A HREF="Text-JSON.html#t%3AResult" >Result</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AencodeJSON" >encodeJSON</A > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => a -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdecodeJSON" >decodeJSON</A > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtoJSON_generic" >toJSON_generic</A > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => a -> <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfromJSON_generic" >fromJSON_generic</A > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A > -> <A HREF="Text-JSON.html#t%3AResult" >Result</A > a</TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Documentation</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" >module <A HREF="Text-JSON.html" >Text.JSON</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >class</SPAN > <A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A NAME="t:Data" ><A NAME="t%3AData" ></A ></A ><B >Data</B > a </TD ><TD CLASS="declbut" ><A HREF="src/Data-Data.html#Data" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" ><P >The <TT ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A ></TT > class comprehends a fundamental primitive <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT > for folding over constructor applications, say terms. This primitive can be instantiated in several ways to map over the immediate subterms of a term; see the <TT >gmap</TT > combinators later in this class. Indeed, a generic programmer does not necessarily need to use the ingenious gfoldl primitive but rather the intuitive <TT >gmap</TT > combinators. The <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT > primitive is completed by means to query top-level constructors, to turn constructor representations into proper terms, and to list all possible datatype constructors. This completion allows us to serve generic programming scenarios like read, show, equality, term generation. </P ><P >The combinators <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3AgmapT" >gmapT</A ></TT >, <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3AgmapQ" >gmapQ</A ></TT >, <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3AgmapM" >gmapM</A ></TT >, etc are all provided with default definitions in terms of <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT >, leaving open the opportunity to provide datatype-specific definitions. (The inclusion of the <TT >gmap</TT > combinators as members of class <TT ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A ></TT > allows the programmer or the compiler to derive specialised, and maybe more efficient code per datatype. <EM >Note</EM >: <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT > is more higher-order than the <TT >gmap</TT > combinators. This is subject to ongoing benchmarking experiments. It might turn out that the <TT >gmap</TT > combinators will be moved out of the class <TT ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A ></TT >.) </P ><P >Conceptually, the definition of the <TT >gmap</TT > combinators in terms of the primitive <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT > requires the identification of the <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT > function arguments. Technically, we also need to identify the type constructor <TT >c</TT > for the construction of the result type from the folded term type. </P ><P >In the definition of <TT >gmapQ</TT ><EM >x</EM > combinators, we use phantom type constructors for the <TT >c</TT > in the type of <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT > because the result type of a query does not involve the (polymorphic) type of the term argument. In the definition of <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3AgmapQl" >gmapQl</A ></TT > we simply use the plain constant type constructor because <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#v%3Agfoldl" >gfoldl</A ></TT > is left-associative anyway and so it is readily suited to fold a left-associative binary operation over the immediate subterms. In the definition of gmapQr, extra effort is needed. We use a higher-order accumulation trick to mediate between left-associative constructor application vs. right-associative binary operation (e.g., <TT >(:)</TT >). When the query is meant to compute a value of type <TT >r</TT >, then the result type withing generic folding is <TT >r -> r</TT >. So the result of folding is a function to which we finally pass the right unit. </P ><P >With the <TT >-XDeriveDataTypeable</TT > option, GHC can generate instances of the <TT ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A ></TT > class automatically. For example, given the declaration </P ><TT > data T a b = C1 a b | C2 deriving (Typeable, Data) </TT ><P >GHC will generate an instance that is equivalent to </P ><TT > instance (Data a, Data b) => Data (T a b) where gfoldl k z (C1 a b) = z C1 `k` a `k` b gfoldl k z C2 = z C2 gunfold k z c = case constrIndex c of 1 -> k (k (z C1)) 2 -> z C2 toConstr (C1 _ _) = con_C1 toConstr C2 = con_C2 dataTypeOf _ = ty_T con_C1 = mkConstr ty_T "C1" [] Prefix con_C2 = mkConstr ty_T "C2" [] Prefix ty_T = mkDataType "Module.T" [con_C1, con_C2] </TT ><P >This is suitable for datatypes that are exported transparently. </P ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Data')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Data" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AChar" >Char</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ADouble" >Double</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFloat" >Float</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt8" >Int8</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt16" >Int16</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt32" >Int32</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt64" >Int64</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord" >Word</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord8" >Word8</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord16" >Word16</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord32" >Word32</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord64" >Word64</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > ()</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-IO-Handle.html#t%3AHandle" >Handle</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#t%3ADataType" >DataType</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Concurrent.html#t%3AThreadId" >ThreadId</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Typeable.html#t%3ATypeRep" >TypeRep</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Typeable.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/bytestring-0.9.1.7/Data-ByteString-Lazy.html#t%3AByteString" >ByteString</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/bytestring-0.9.1.7/Data-ByteString.html#t%3AByteString" >ByteString</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > <A HREF="/usr/share/doc/ghc/html/libraries/containers-0.3.0.0/Data-IntSet.html#t%3AIntSet" >IntSet</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > [a]</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AIntegral" >Integral</A > a) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Ratio.html#t%3ARatio" >Ratio</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Foreign-StablePtr.html#t%3AStablePtr" >StablePtr</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Foreign-Ptr.html#t%3APtr" >Ptr</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Foreign-ForeignPtr.html#t%3AForeignPtr" >ForeignPtr</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-Conc.html#t%3ASTM" >STM</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/GHC-Conc.html#t%3ATVar" >TVar</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-IORef.html#t%3AIORef" >IORef</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Concurrent-MVar.html#t%3AMVar" >MVar</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > a)</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/containers-0.3.0.0/Data-IntMap.html#t%3AIntMap" >IntMap</A > a)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Ord.html#t%3AOrd" >Ord</A > a) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/containers-0.3.0.0/Data-Set.html#t%3ASet" >Set</A > a)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (a -> b)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Either.html#t%3AEither" >Either</A > a b)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (a, b)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > s, <A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Monad-ST.html#t%3AST" >ST</A > s a)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Ix.html#t%3AIx" >Ix</A > a) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/array-0.3.0.1/Data-Array.html#t%3AArray" >Array</A > a b)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > k, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Ord.html#t%3AOrd" >Ord</A > k) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (<A HREF="/usr/share/doc/ghc/html/libraries/containers-0.3.0.0/Data-Map.html#t%3AMap" >Map</A > k a)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > c) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (a, b, c)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > c, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > d) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (a, b, c, d)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > c, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > d, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > e) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (a, b, c, d, e)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > c, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > d, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > e, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > f) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (a, b, c, d, e, f)</TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > b, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > c, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > d, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > e, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > f, <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > g) => <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > (a, b, c, d, e, f, g)</TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >class</SPAN > <A NAME="t:Typeable" ><A NAME="t%3ATypeable" ></A ></A ><B >Typeable</B > a </TD ><TD CLASS="declbut" ><A HREF="src/Data-Typeable.html#Typeable" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >The class <TT ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A ></TT > allows a concrete representation of a type to be calculated. </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Typeable')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Typeable" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AChar" >Char</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ADouble" >Double</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFloat" >Float</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt8" >Int8</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt16" >Int16</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt32" >Int32</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt64" >Int64</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Monad-ST.html#t%3ARealWorld" >RealWorld</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord" >Word</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord8" >Word8</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord16" >Word16</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord32" >Word32</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Word.html#t%3AWord64" >Word64</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > ()</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Data.html#t%3ADataType" >DataType</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Exception-Base.html#t%3ABlockedIndefinitelyOnMVar" >BlockedIndefinitelyOnMVar</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Exception-Base.html#t%3ABlockedIndefinitelyOnSTM" >BlockedIndefinitelyOnSTM</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Exception-Base.html#t%3ADeadlock" >Deadlock</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Exception-Base.html#t%3AAssertionFailed" >AssertionFailed</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Exception-Base.html#t%3AAsyncException" >AsyncException</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Exception-Base.html#t%3AArrayException" >ArrayException</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-Exit.html#t%3AExitCode" >ExitCode</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Exception-Base.html#t%3AIOException" >IOException</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Typeable.html#t%3ATypeRep" >TypeRep</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Typeable.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/bytestring-0.9.1.7/Data-ByteString-Lazy.html#t%3AByteString" >ByteString</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/bytestring-0.9.1.7/Data-ByteString.html#t%3AByteString" >ByteString</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="/usr/share/doc/ghc/html/libraries/containers-0.3.0.0/Data-IntSet.html#t%3AIntSet" >IntSet</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="Text-JSON-Types.html#t%3AJSString" >JSString</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A ></TD ></TR ><TR ><TD CLASS="decl" >(<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Typeable.html#t%3ATypeable1" >Typeable1</A > s, <A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > a) => <A HREF="Text-JSON-Generic.html#t%3ATypeable" >Typeable</A > (s a)</TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:toJSON" ><A NAME="v%3AtoJSON" ></A ></A ><B >toJSON</B > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => a -> <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A ></TD ><TD CLASS="declbut" ><A HREF="src/Text-JSON-Generic.html#toJSON" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Convert anything to a JSON value. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:fromJSON" ><A NAME="v%3AfromJSON" ></A ></A ><B >fromJSON</B > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A > -> <A HREF="Text-JSON.html#t%3AResult" >Result</A > a</TD ><TD CLASS="declbut" ><A HREF="src/Text-JSON-Generic.html#fromJSON" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Convert a JSON value to anything (fails if the types do not match). </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:encodeJSON" ><A NAME="v%3AencodeJSON" ></A ></A ><B >encodeJSON</B > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => a -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="declbut" ><A HREF="src/Text-JSON-Generic.html#encodeJSON" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Encode a value as a string. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:decodeJSON" ><A NAME="v%3AdecodeJSON" ></A ></A ><B >decodeJSON</B > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> a</TD ><TD CLASS="declbut" ><A HREF="src/Text-JSON-Generic.html#decodeJSON" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Decode a string as a value. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:toJSON_generic" ><A NAME="v%3AtoJSON_generic" ></A ></A ><B >toJSON_generic</B > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => a -> <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A ></TD ><TD CLASS="declbut" ><A HREF="src/Text-JSON-Generic.html#toJSON_generic" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:fromJSON_generic" ><A NAME="v%3AfromJSON_generic" ></A ></A ><B >fromJSON_generic</B > :: <A HREF="Text-JSON-Generic.html#t%3AData" >Data</A > a => <A HREF="Text-JSON-Types.html#t%3AJSValue" >JSValue</A > -> <A HREF="Text-JSON.html#t%3AResult" >Result</A > a</TD ><TD CLASS="declbut" ><A HREF="src/Text-JSON-Generic.html#fromJSON_generic" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="botbar" >Produced by <A HREF="http://www.haskell.org/haddock/" >Haddock</A > version 2.6.1</TD ></TR ></TABLE ></BODY ></HTML >