-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Fast JSON parsing and encoding -- -- A JSON parsing and encoding library optimized for ease of use and high -- performance. -- -- Note: if you use GHCi or Template Haskell, please see the -- README file for important details about building this -- package, and other packages that depend on it: -- https://github.com/mailrank/aeson#readme -- -- Parsing performance on a late 2010 MacBook Pro (2.66GHz Core i7), for -- mostly-English tweets from Twitter's JSON search API: -- -- -- -- Handling heavily-escaped text is a little more work. Here is parsing -- performance with Japanese tweets, where much of the text is entirely -- Unicode-escaped. -- -- -- -- Encoding performance on the same machine and data: -- -- -- -- (A note on naming: in Greek mythology, Aeson was the father of Jason.) @package aeson @version 0.3.2.13 -- | Types for working with JSON data. module Data.Aeson.Types -- | A JSON value represented as a Haskell value. data Value Object :: Object -> Value Array :: Array -> Value String :: Text -> Value Number :: Number -> Value Bool :: !Bool -> Value Null :: Value -- | A JSON "array" (sequence). type Array = Vector Value -- | The empty array. emptyArray :: Value -- | A key/value pair for an Object. type Pair = (Text, Value) -- | A JSON "object" (key/value map). type Object = Map Text Value -- | The empty object. emptyObject :: Value -- | A newtype wrapper for UTCTime that uses the same non-standard -- serialization format as Microsoft .NET, whose System.DateTime -- type is by default serialized to JSON as in the following example: -- --
--   /Date(1302547608878)/
--   
-- -- The number represents milliseconds since the Unix epoch. newtype DotNetTime DotNetTime :: UTCTime -> DotNetTime fromDotNetTime :: DotNetTime -> UTCTime -- | Fail parsing due to a type mismatch, with a descriptive message. typeMismatch :: String -> Value -> Parser a -- | A continuation-based parser type. data Parser a -- | The result of running a Parser. data Result a Error :: String -> Result a Success :: a -> Result a -- | A type that can be converted from JSON, with the possibility of -- failure. -- -- When writing an instance, use mzero or fail to make a -- conversion fail, e.g. if an Object is missing a required key, -- or the value is of the wrong type. -- -- An example type and instance: -- --
--   data Coord { x :: Double, y :: Double }
--   
--   instance FromJSON Coord where
--      parseJSON (Object v) = Coord <$>
--                            v .: "x" <*>
--                            v .: "y"
--   
--   -- A non-Object value is of the wrong type, so use mzero to fail.
--      parseJSON _          = mzero
--   
-- -- This example assumes the OverloadedStrings language option is enabled. class FromJSON a parseJSON :: FromJSON a => Value -> Parser a -- | Convert a value from JSON, failing if the types do not match. fromJSON :: FromJSON a => Value -> Result a -- | Run a Parser. parse :: (a -> Parser b) -> a -> Result b -- | Run a Parser with an Either result type. parseEither :: (a -> Parser b) -> a -> Either String b -- | Run a Parser with a Maybe result type. parseMaybe :: (a -> Parser b) -> a -> Maybe b -- | A type that can be converted to JSON. -- -- An example type and instance: -- --
--   data Coord { x :: Double, y :: Double }
--   
--   instance ToJSON Coord where
--      toJSON (Coord x y) = object ["x" .= x, "y" .= y]
--   
-- -- This example assumes the OverloadedStrings language option is enabled. class ToJSON a toJSON :: ToJSON a => a -> Value -- | Construct a Pair from a key and a value. (.=) :: ToJSON a => Text -> a -> Pair -- | Retrieve the value associated with the given key of an Object. -- The result is empty if the key is not present or the value -- cannot be converted to the desired type. -- -- This accessor is appropriate if the key and value must be -- present in an object for it to be valid. If the key and value are -- optional, use '(.:?)' instead. (.:) :: FromJSON a => Object -> Text -> Parser a -- | Retrieve the value associated with the given key of an Object. -- The result is Nothing if the key is not present, or -- empty if the value cannot be converted to the desired type. -- -- This accessor is most useful if the key and value can be absent from -- an object without affecting its validity. If the key and value are -- mandatory, use '(.:)' instead. (.:?) :: FromJSON a => Object -> Text -> Parser (Maybe a) -- | Create a Value from a list of name/value Pairs. If -- duplicate keys arise, earlier keys and their associated values win. object :: [Pair] -> Value genericToJSON :: Data a => a -> Value genericFromJSON :: Data a => Value -> Result a instance [incoherent] Typeable1 Result instance [incoherent] Typeable Value instance [incoherent] Typeable DotNetTime instance [incoherent] Eq a => Eq (Result a) instance [incoherent] Show a => Show (Result a) instance [incoherent] Eq Value instance [incoherent] Show Value instance [incoherent] Data Value instance [incoherent] Eq DotNetTime instance [incoherent] Ord DotNetTime instance [incoherent] Read DotNetTime instance [incoherent] Show DotNetTime instance [incoherent] FormatTime DotNetTime instance [incoherent] FromJSON a => FromJSON (Last a) instance [incoherent] ToJSON a => ToJSON (Last a) instance [incoherent] FromJSON a => FromJSON (First a) instance [incoherent] ToJSON a => ToJSON (First a) instance [incoherent] FromJSON a => FromJSON (Dual a) instance [incoherent] ToJSON a => ToJSON (Dual a) instance [incoherent] (FromJSON a, FromJSON b, FromJSON c) => FromJSON (a, b, c) instance [incoherent] (ToJSON a, ToJSON b, ToJSON c) => ToJSON (a, b, c) instance [incoherent] (FromJSON a, FromJSON b) => FromJSON (a, b) instance [incoherent] (ToJSON a, ToJSON b) => ToJSON (a, b) instance [incoherent] FromJSON UTCTime instance [incoherent] ToJSON UTCTime instance [incoherent] FromJSON DotNetTime instance [incoherent] ToJSON DotNetTime instance [incoherent] FromJSON Value instance [incoherent] ToJSON Value instance [incoherent] FromJSON v => FromJSON (HashMap ByteString v) instance [incoherent] ToJSON v => ToJSON (HashMap ByteString v) instance [incoherent] FromJSON v => FromJSON (HashMap ByteString v) instance [incoherent] ToJSON v => ToJSON (HashMap ByteString v) instance [incoherent] FromJSON v => FromJSON (HashMap String v) instance [incoherent] ToJSON v => ToJSON (HashMap String v) instance [incoherent] FromJSON v => FromJSON (HashMap Text v) instance [incoherent] ToJSON v => ToJSON (HashMap Text v) instance [incoherent] FromJSON v => FromJSON (HashMap Text v) instance [incoherent] ToJSON v => ToJSON (HashMap Text v) instance [incoherent] FromJSON v => FromJSON (Map ByteString v) instance [incoherent] ToJSON v => ToJSON (Map ByteString v) instance [incoherent] FromJSON v => FromJSON (Map ByteString v) instance [incoherent] ToJSON v => ToJSON (Map ByteString v) instance [incoherent] FromJSON v => FromJSON (Map String v) instance [incoherent] ToJSON v => ToJSON (Map String v) instance [incoherent] FromJSON v => FromJSON (Map Text v) instance [incoherent] ToJSON v => ToJSON (Map Text v) instance [incoherent] FromJSON v => FromJSON (Map Text v) instance [incoherent] ToJSON v => ToJSON (Map Text v) instance [incoherent] FromJSON IntSet instance [incoherent] ToJSON IntSet instance [incoherent] (Eq a, Hashable a, FromJSON a) => FromJSON (HashSet a) instance [incoherent] ToJSON a => ToJSON (HashSet a) instance [incoherent] (Ord a, FromJSON a) => FromJSON (Set a) instance [incoherent] ToJSON a => ToJSON (Set a) instance [incoherent] (Vector Vector a, FromJSON a) => FromJSON (Vector a) instance [incoherent] (Vector Vector a, ToJSON a) => ToJSON (Vector a) instance [incoherent] (Prim a, FromJSON a) => FromJSON (Vector a) instance [incoherent] (Prim a, ToJSON a) => ToJSON (Vector a) instance [incoherent] (Storable a, FromJSON a) => FromJSON (Vector a) instance [incoherent] (Storable a, ToJSON a) => ToJSON (Vector a) instance [incoherent] FromJSON a => FromJSON (Vector a) instance [incoherent] ToJSON a => ToJSON (Vector a) instance [incoherent] FromJSON a => FromJSON [a] instance [incoherent] ToJSON a => ToJSON [a] instance [incoherent] FromJSON ByteString instance [incoherent] ToJSON ByteString instance [incoherent] FromJSON ByteString instance [incoherent] ToJSON ByteString instance [incoherent] FromJSON Text instance [incoherent] ToJSON Text instance [incoherent] FromJSON Text instance [incoherent] ToJSON Text instance [incoherent] FromJSON Word64 instance [incoherent] ToJSON Word64 instance [incoherent] FromJSON Word32 instance [incoherent] ToJSON Word32 instance [incoherent] FromJSON Word16 instance [incoherent] ToJSON Word16 instance [incoherent] FromJSON Word8 instance [incoherent] ToJSON Word8 instance [incoherent] FromJSON Word instance [incoherent] ToJSON Word instance [incoherent] FromJSON Int64 instance [incoherent] ToJSON Int64 instance [incoherent] FromJSON Int32 instance [incoherent] ToJSON Int32 instance [incoherent] FromJSON Int16 instance [incoherent] ToJSON Int16 instance [incoherent] FromJSON Int8 instance [incoherent] ToJSON Int8 instance [incoherent] FromJSON Integer instance [incoherent] ToJSON Integer instance [incoherent] FromJSON Int instance [incoherent] ToJSON Int instance [incoherent] FromJSON (Ratio Integer) instance [incoherent] ToJSON (Ratio Integer) instance [incoherent] FromJSON Float instance [incoherent] ToJSON Float instance [incoherent] FromJSON Number instance [incoherent] ToJSON Number instance [incoherent] FromJSON Double instance [incoherent] ToJSON Double instance [incoherent] FromJSON Char instance [incoherent] ToJSON Char instance [incoherent] FromJSON [Char] instance [incoherent] ToJSON [Char] instance [incoherent] FromJSON () instance [incoherent] ToJSON () instance [incoherent] FromJSON Bool instance [incoherent] ToJSON Bool instance [incoherent] (FromJSON a, FromJSON b) => FromJSON (Either a b) instance [incoherent] (ToJSON a, ToJSON b) => ToJSON (Either a b) instance [incoherent] FromJSON a => FromJSON (Maybe a) instance [incoherent] ToJSON a => ToJSON (Maybe a) instance [incoherent] Hashable Value instance [incoherent] IsString Value instance [incoherent] NFData Value instance [incoherent] Monoid (Parser a) instance [incoherent] MonadPlus Parser instance [incoherent] Alternative Parser instance [incoherent] Applicative Parser instance [incoherent] Functor Parser instance [incoherent] Monad Parser instance [incoherent] Monoid (Result a) instance [incoherent] Alternative Result instance [incoherent] MonadPlus Result instance [incoherent] Applicative Result instance [incoherent] Monad Result instance [incoherent] Functor Result instance [incoherent] NFData a => NFData (Result a) -- | JSON handling using Data.Generics. -- -- This is based on the Text.JSON.Generic package originally -- written by Lennart Augustsson. module Data.Aeson.Generic fromJSON :: Data a => Value -> Result a toJSON :: Data a => a -> Value -- | Efficiently and correctly parse a JSON string. The string must be -- encoded as UTF-8. module Data.Aeson.Parser -- | Parse a top-level JSON value. This must be either an object or an -- array. json :: Parser Value -- | Parse any JSON value. Use json in preference to this function -- if you are parsing data from an untrusted source. value :: Parser Value jstring :: Parser Text -- | Efficiently serialize a JSON value as a lazy ByteString, -- encoded as UTF-8. module Data.Aeson.Encode -- | Encode a JSON value to a Builder. fromValue :: Value -> Builder -- | Efficiently serialize a JSON value as a lazy ByteString. encode :: ToJSON a => a -> ByteString -- | Types and functions for working efficiently with JSON data. -- -- (A note on naming: in Greek mythology, Aeson was the father of Jason.) module Data.Aeson -- | A JSON value represented as a Haskell value. data Value Object :: Object -> Value Array :: Array -> Value String :: Text -> Value Number :: Number -> Value Bool :: !Bool -> Value Null :: Value -- | A JSON "array" (sequence). type Array = Vector Value -- | A JSON "object" (key/value map). type Object = Map Text Value -- | A newtype wrapper for UTCTime that uses the same non-standard -- serialization format as Microsoft .NET, whose System.DateTime -- type is by default serialized to JSON as in the following example: -- --
--   /Date(1302547608878)/
--   
-- -- The number represents milliseconds since the Unix epoch. newtype DotNetTime DotNetTime :: UTCTime -> DotNetTime fromDotNetTime :: DotNetTime -> UTCTime -- | A type that can be converted from JSON, with the possibility of -- failure. -- -- When writing an instance, use mzero or fail to make a -- conversion fail, e.g. if an Object is missing a required key, -- or the value is of the wrong type. -- -- An example type and instance: -- --
--   data Coord { x :: Double, y :: Double }
--   
--   instance FromJSON Coord where
--      parseJSON (Object v) = Coord <$>
--                            v .: "x" <*>
--                            v .: "y"
--   
--   -- A non-Object value is of the wrong type, so use mzero to fail.
--      parseJSON _          = mzero
--   
-- -- This example assumes the OverloadedStrings language option is enabled. class FromJSON a parseJSON :: FromJSON a => Value -> Parser a -- | The result of running a Parser. data Result a Error :: String -> Result a Success :: a -> Result a -- | Convert a value from JSON, failing if the types do not match. fromJSON :: FromJSON a => Value -> Result a -- | A type that can be converted to JSON. -- -- An example type and instance: -- --
--   data Coord { x :: Double, y :: Double }
--   
--   instance ToJSON Coord where
--      toJSON (Coord x y) = object ["x" .= x, "y" .= y]
--   
-- -- This example assumes the OverloadedStrings language option is enabled. class ToJSON a toJSON :: ToJSON a => a -> Value -- | Construct a Pair from a key and a value. (.=) :: ToJSON a => Text -> a -> Pair -- | Retrieve the value associated with the given key of an Object. -- The result is empty if the key is not present or the value -- cannot be converted to the desired type. -- -- This accessor is appropriate if the key and value must be -- present in an object for it to be valid. If the key and value are -- optional, use '(.:?)' instead. (.:) :: FromJSON a => Object -> Text -> Parser a -- | Retrieve the value associated with the given key of an Object. -- The result is Nothing if the key is not present, or -- empty if the value cannot be converted to the desired type. -- -- This accessor is most useful if the key and value can be absent from -- an object without affecting its validity. If the key and value are -- mandatory, use '(.:)' instead. (.:?) :: FromJSON a => Object -> Text -> Parser (Maybe a) -- | Create a Value from a list of name/value Pairs. If -- duplicate keys arise, earlier keys and their associated values win. object :: [Pair] -> Value -- | Efficiently serialize a JSON value as a lazy ByteString. encode :: ToJSON a => a -> ByteString -- | Parse a top-level JSON value. This must be either an object or an -- array. json :: Parser Value -- | Functions to mechanically derive ToJSON and FromJSON -- instances. Note that you need to enable the TemplateHaskell -- language extension in order to use this module. -- -- An example shows how instances are generated for arbitrary data types. -- First we define a data type: -- --
--   data D a = Nullary
--            | Unary Int
--            | Product String Char a
--            | Record { testOne   :: Double
--                     , testTwo   :: Bool
--                     , testThree :: D a
--                     } deriving Eq
--   
-- -- Next we derive the necessary instances. Note that we make use of the -- feature to change record field names. In this case we drop the first 4 -- characters of every field name. -- --
--   $(deriveJSON (drop 4) ''D)
--   
-- -- This will result in the following (simplified) code to be spliced in -- your program: -- --
--   import Control.Applicative
--   import Control.Monad
--   import Data.Aeson
--   import Data.Aeson.TH
--   import qualified Data.Map    as M
--   import qualified Data.Text   as T
--   import qualified Data.Vector as V
--   
--   instance ToJSON a => ToJSON (D a) where
--       toJSON =
--         value ->
--           case value of
--             Nullary ->
--                 object [pack "Nullary" .= toJSON ([] :: [()])]
--             Unary arg1 ->
--                 object [pack "Unary" .= toJSON arg1]
--             Product arg1 arg2 arg3 ->
--                 object [ pack "Product"
--                          .= toJSON [ toJSON arg1
--                                    , toJSON arg2
--                                    , toJSON arg3
--                                    ]
--                        ]
--             Record arg1 arg2 arg3 ->
--                 object [ pack "Record"
--                          .= object [ pack "One"   .= arg1
--                                    , pack "Two"   .= arg2
--                                    , pack "Three" .= arg3
--                                    ]
--                        ]
--   
-- --
--   instance FromJSON a => FromJSON (D a) where
--       parseJSON =
--         value ->
--           case value of
--             Object obj ->
--               case toList obj of
--                 [(conKey, conVal)] ->
--                     case conKey of
--                       _ | (conKey == pack "Nullary") ->
--                             case conVal of
--                               Array arr | null arr -> pure Nullary
--                               _ -> mzero
--                         | (conKey == pack "Unary") ->
--                             case conVal of
--                               arg -> Unary <$> parseJSON arg
--                         | (conKey == pack "Product") ->
--                             case conVal of
--                               Array arr | length arr == 3 ->
--                                 Product <$> parseJSON (arr ! 0)
--                                         <*> parseJSON (arr ! 1)
--                                         <*> parseJSON (arr ! 2)
--                               _ -> mzero
--                         | (conKey == pack "Record") ->
--                             case conVal of
--                               Object obj ->
--                                 Record <$> (obj .: pack "One")
--                                        <*> (obj .: pack "Two")
--                                        <*> (obj .: pack "Three")
--                               _ -> mzero
--                        | otherwise -> mzero
--                 _ -> mzero
--             _ -> mzero
--   
-- -- Now we can use the newly created instances. -- --
--   d :: D Int
--   d = Record { testOne = 3.14159
--              , testTwo = True
--              , testThree = Product "test" 'A' 123
--              }
--   
-- --
--   >>> fromJSON (toJSON d) == Success d
--   > True
--   
module Data.Aeson.TH -- | Generates both ToJSON and FromJSON instance declarations -- for the given data type. -- -- This is a convienience function which is equivalent to calling both -- deriveToJSON and deriveFromJSON. deriveJSON :: (String -> String) -> Name -> Q [Dec] -- | Generates a ToJSON instance declaration for the given data -- type. -- -- Example: -- --
--   data Foo = Foo Char Int
--   $(deriveToJSON id ''Foo)
--   
-- -- This will splice in the following code: -- --
--   instance ToJSON Foo where
--        toJSON =
--            value -> case value of
--                        Foo arg1 arg2 -> toJSON [toJSON arg1, toJSON arg2]
--   
deriveToJSON :: (String -> String) -> Name -> Q [Dec] -- | Generates a FromJSON instance declaration for the given data -- type. -- -- Example: -- --
--   data Foo = Foo Char Int
--   $(deriveFromJSON id ''Foo)
--   
-- -- This will splice in the following code: -- --
--   instance FromJSON Foo where
--       parseJSON =
--           value -> case value of
--                       Array arr | (length arr == 2) ->
--                          Foo <$> parseJSON (arr ! 0)
--                              <*> parseJSON (arr ! 1)
--                       _ -> mzero
--   
deriveFromJSON :: (String -> String) -> Name -> Q [Dec] -- | Generates a lambda expression which encodes the given data type as -- JSON. -- -- Example: -- --
--   data Foo = Foo Int
--   
-- --
--   encodeFoo :: Foo -> Value
--   encodeFoo = $(mkToJSON id ''Foo)
--   
-- -- This will splice in the following code: -- --
--   value -> case value of Foo arg1 -> toJSON arg1
--   
mkToJSON :: (String -> String) -> Name -> Q Exp -- | Generates a lambda expression which parses the JSON encoding of the -- given data type. -- -- Example: -- --
--   data Foo = Foo Int
--   
-- --
--   parseFoo :: Value -> Parser Foo
--   parseFoo = $(mkParseJSON id ''Foo)
--   
-- -- This will splice in the following code: -- --
--   \value -> case value of arg -> Foo <$> parseJSON arg
--   
mkParseJSON :: (String -> String) -> Name -> Q Exp