-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | JSON parsing library
--   
--   JSON parsing library with simple and sane API
@package hjson
@version 1.3.2

module Text.HJson
data Json
JString :: String -> Json
JNumber :: Rational -> Json
JObject :: (Map String Json) -> Json
JBool :: Bool -> Json
JNull :: Json
JArray :: [Json] -> Json

-- | Parses JSON string
fromString :: String -> Either ParseError Json

-- | Renders JSON to String
toString :: Json -> String

-- | Escapes string for inclusion in JSON
escapeJString :: String -> String

-- | Parsec parser for JSON
jsonParser :: Monad m => ParsecT String s m Json

-- | Class of types that can be converted to or from JSON
class Jsonable a

-- | Convert value to JSON representation
toJson :: Jsonable a => a -> Json

-- | Deserialize value. Returns Nothing in case of failure. Default
--   implementation always returns Nothing
fromJson :: Jsonable a => Json -> Maybe a

-- | Newtype wrapper for list. It's user to avoid overlapping instances for
--   string
newtype List a
List :: [a] -> List a
[asList] :: List a -> [a]

-- | Newtype wrapper for Map String a. Similarly it's used to avoid
--   overlapping instances for more generic Map a b instance.
--   
--   Jsonable instance for this type require that every JSON value in map
--   should be properly decoded.
newtype Object a
Object :: Map String a -> Object a
[asMap] :: Object a -> Map String a

-- | Another wrapper for Map String a. It have different <a>Jsonable</a>
--   instance. Undecodable values in <a>JObject</a> are ignored.
newtype LaxObject a
LaxObject :: Map String a -> LaxObject a
[asLaxMap] :: LaxObject a -> Map String a
instance GHC.Classes.Eq a => GHC.Classes.Eq (Text.HJson.LaxObject a)
instance GHC.Show.Show a => GHC.Show.Show (Text.HJson.LaxObject a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Text.HJson.Object a)
instance GHC.Show.Show a => GHC.Show.Show (Text.HJson.Object a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Text.HJson.List a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Text.HJson.List a)
instance GHC.Show.Show a => GHC.Show.Show (Text.HJson.List a)
instance Data.Data.Data Text.HJson.Json
instance GHC.Show.Show Text.HJson.Json
instance GHC.Classes.Eq Text.HJson.Json
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Text.HJson.LaxObject a)
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Text.HJson.Object a)
instance (Text.HJson.Jsonable a, GHC.Classes.Ord a, Text.HJson.Jsonable b) => Text.HJson.Jsonable (Data.Map.Internal.Map a b)
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Data.IntMap.Internal.IntMap a)
instance (Text.HJson.Jsonable a, GHC.Classes.Ord a) => Text.HJson.Jsonable (Data.Set.Internal.Set a)
instance Text.HJson.Jsonable Data.IntSet.Internal.IntSet
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Data.Sequence.Internal.Seq a)
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Text.HJson.List a)
instance Text.HJson.Jsonable Text.HJson.Json
instance Text.HJson.Jsonable GHC.Types.Bool
instance Text.HJson.Jsonable GHC.Integer.Type.Integer
instance Text.HJson.Jsonable GHC.Types.Int
instance Text.HJson.Jsonable GHC.Types.Double
instance Text.HJson.Jsonable GHC.Types.Float
instance Text.HJson.Jsonable GHC.Base.String
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (GHC.Base.Maybe a)
instance (Text.HJson.Jsonable a, Text.HJson.Jsonable b) => Text.HJson.Jsonable (Data.Either.Either a b)
instance (Text.HJson.Jsonable a, Text.HJson.Jsonable b) => Text.HJson.Jsonable (a, b)
instance (Text.HJson.Jsonable a, Text.HJson.Jsonable b, Text.HJson.Jsonable c) => Text.HJson.Jsonable (a, b, c)
instance (Text.HJson.Jsonable a, Text.HJson.Jsonable b, Text.HJson.Jsonable c, Text.HJson.Jsonable d) => Text.HJson.Jsonable (a, b, c, d)
instance (Text.HJson.Jsonable a, Text.HJson.Jsonable b, Text.HJson.Jsonable c, Text.HJson.Jsonable d, Text.HJson.Jsonable e) => Text.HJson.Jsonable (a, b, c, d, e)

module Text.HJson.Pretty

-- | Pretty-prints JSON with given indenter
toString :: String -> Json -> String
