-- 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 where fromJson = const Nothing

-- | 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 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)
instance (Text.HJson.Jsonable a, GHC.Classes.Ord a, Text.HJson.Jsonable b) => Text.HJson.Jsonable (Data.Map.Base.Map a b)
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Data.IntMap.Base.IntMap a)
instance (Text.HJson.Jsonable a, GHC.Classes.Ord a) => Text.HJson.Jsonable (Data.Set.Base.Set a)
instance Text.HJson.Jsonable Data.IntSet.Base.IntSet
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Data.Sequence.Seq a)
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Text.HJson.List a)
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Text.HJson.Object a)
instance Text.HJson.Jsonable a => Text.HJson.Jsonable (Text.HJson.LaxObject a)

module Text.HJson.Pretty

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