-- 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: -- --
-- /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