-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A reflective JSON serializer/parser. -- -- This package uses the Scrap Your Boilerplate With Class approach to -- generics to implement a reflective Json serializer and deserializer. -- Nested record types can be automatically converted to corresponding -- JSON objects and vice versa. In both cases, various aspects of -- serializing and deserializing can be customized by implementing -- instances of type classes. Note that only Haskell 98 types can be -- serialized and deserialized, and that the use of strict constructors -- will lead to runtime errors with the current implemetation. Apart from -- the reflective stuff, the package also provides a straightforward -- Haskell representation of JSON data, together with a unicode-safe -- parser and a suitable implementation of show. The code hasn't -- yet been tested for performance; it might be quite slow. @package RJson @version 0.2 module Text.RJson class TranslateField a translateField :: (TranslateField a) => a -> String -> String data TranslateFieldD a -- | New instances can be added to this class to customize JSON -- serialization. class ToJson a toJson :: (ToJson a) => a -> JsonData exclude :: (ToJson a) => a -> String -> Bool arrayPrepend :: (ToJson a) => a -> [JsonData] arrayAppend :: (ToJson a) => a -> [JsonData] objectExtras :: (ToJson a) => a -> [(String, JsonData)] data ToJsonD a -- | This is the implementation of toJson for the generic instance -- declaration, but it's useful to be able to use the same implentation -- for other instance declarations which override the default -- implementation of exclude. genericToJson :: (Data ToJsonD a, ToJson a, TranslateField a) => a -> JsonData -- | A Haskell representation of a JSON data structure. data JsonData JDString :: String -> JsonData JDNumber :: Double -> JsonData JDArray :: [JsonData] -> JsonData JDBool :: Bool -> JsonData JDObject :: (Map String JsonData) -> JsonData class FromJson a objectDefaults :: (FromJson a) => a -> Map String JsonData data FromJsonD a -- | Converts a String (interpreted as a true unicode String) to an -- instance of JsonData. parseJsonString :: String -> Either String JsonData -- | Converts a ByteString to an instance of JsonData (unicode encoding is -- detected automatically). parseJsonByteString :: ByteString -> Either String JsonData -- | Converts a JSON String (interpreted as a true unicode string) to a -- value of the type given by the first (dummy) argument. fromJsonString :: (FromJson a) => a -> String -> Either String a -- | Converts a JSON ByteString (with unicode encoding automatically -- detected) to a value of the type given by the first (dummy) argument. fromJsonByteString :: (FromJson a) => a -> ByteString -> Either String a genericFromJson :: (Data FromJsonD a, Data TranslateFieldD a) => a -> JsonData -> Either String a stripInitialUnderscores :: [Char] -> [Char] -- | Converts a value to an ASCII-only JSON String. toJsonString :: (ToJson a) => a -> String -- | Use this for merging two or more records together. Sensible instances -- of FromJson and ToJson are already defined for this type. data Union a b Union :: a -> b -> Union a b -- | Nested Unions are left-branching by convention (since this is what you -- get by using the constructor as an infix operator). type Union3 a b c = Union (Union a b) c type Union4 a b c d = Union (Union3 a b c) d type Union5 a b c d e = Union (Union4 a b c d) e type Union6 a b c d e f = Union (Union5 a b c d e) f type Union7 a b c d e f g = Union (Union6 a b c d e f) g type Union8 a b c d e f g h = Union (Union7 a b c d e f g) h type Union9 a b c d e f g h i = Union (Union8 a b c d e f g h) i type Union10 a b c d e f g h i j = Union (Union9 a b c d e f g h i) j instance [overlap ok] (Data ctx Int, Sat (ctx Test2), Sat (ctx Int)) => Data ctx Test2 instance [overlap ok] Typeable Test2 instance [overlap ok] Show Test2 instance [overlap ok] (Sat (ctx Test)) => Data ctx Test instance [overlap ok] Typeable Test instance [overlap ok] Show Test instance [overlap ok] (Show a, Show b) => Show (Union a b) instance [overlap ok] (Data FromJsonD t, Data TranslateFieldD t) => FromJson t instance [overlap ok] (FromJson a, FromJson b, FromJson c, FromJson d, FromJson e, FromJson f, FromJson g, FromJson h, FromJson i, FromJson j) => FromJson (a, b, c, d, e, f, g, h, i, j) instance [overlap ok] (FromJson a, FromJson b, FromJson c, FromJson d, FromJson e, FromJson f, FromJson g, FromJson h, FromJson i) => FromJson (a, b, c, d, e, f, g, h, i) instance [overlap ok] (FromJson a, FromJson b, FromJson c, FromJson d, FromJson e, FromJson f, FromJson g, FromJson h) => FromJson (a, b, c, d, e, f, g, h) instance [overlap ok] (FromJson a, FromJson b, FromJson c, FromJson d, FromJson e, FromJson f, FromJson g) => FromJson (a, b, c, d, e, f, g) instance [overlap ok] (FromJson a, FromJson b, FromJson c, FromJson d, FromJson e, FromJson f) => FromJson (a, b, c, d, e, f) instance [overlap ok] (FromJson a, FromJson b, FromJson c, FromJson d, FromJson e) => FromJson (a, b, c, d, e) instance [overlap ok] (FromJson a, FromJson b, FromJson c, FromJson d) => FromJson (a, b, c, d) instance [overlap ok] (FromJson a, FromJson b, FromJson c) => FromJson (a, b, c) instance [overlap ok] (FromJson a, FromJson b) => FromJson (a, b) instance [overlap ok] (FromJson a, FromJson b) => FromJson (Union a b) instance [overlap ok] FromJson Bool instance [overlap ok] (Integral a) => FromJson (Ratio a) instance [overlap ok] FromJson Double instance [overlap ok] FromJson Integer instance [overlap ok] FromJson Int instance [overlap ok] (FromJson a) => FromJson [a] instance [overlap ok] FromJson Char instance [overlap ok] (FromJson t, TranslateField t) => Sat (FromJsonD t) instance [overlap ok] (ToJson a, ToJson b, ToJson c, ToJson d, ToJson e, ToJson f, ToJson g, ToJson h, ToJson i, ToJson j) => ToJson (a, b, c, d, e, f, g, h, i, j) instance [overlap ok] (ToJson a, ToJson b, ToJson c, ToJson d, ToJson e, ToJson f, ToJson g, ToJson h, ToJson i) => ToJson (a, b, c, d, e, f, g, h, i) instance [overlap ok] (ToJson a, ToJson b, ToJson c, ToJson d, ToJson e, ToJson f, ToJson g, ToJson h) => ToJson (a, b, c, d, e, f, g, h) instance [overlap ok] (ToJson a, ToJson b, ToJson c, ToJson d, ToJson e, ToJson f, ToJson g) => ToJson (a, b, c, d, e, f, g) instance [overlap ok] (ToJson a, ToJson b, ToJson c, ToJson d, ToJson e, ToJson f) => ToJson (a, b, c, d, e, f) instance [overlap ok] (ToJson a, ToJson b, ToJson c, ToJson d, ToJson e) => ToJson (a, b, c, d, e) instance [overlap ok] (ToJson a, ToJson b, ToJson c, ToJson d) => ToJson (a, b, c, d) instance [overlap ok] (ToJson a, ToJson b, ToJson c) => ToJson (a, b, c) instance [overlap ok] (ToJson a, ToJson b) => ToJson (a, b) instance [overlap ok] (Data ToJsonD t, TranslateField t) => ToJson t instance [overlap ok] (ToJson a, ToJson b) => ToJson (Union a b) instance [overlap ok] (Typeable a, ToJson a, Ix i) => ToJson (Array i a) instance [overlap ok] (Typeable a, ToJson a) => ToJson [a] instance [overlap ok] (ToJson a) => ToJson (Map String a) instance [overlap ok] ToJson Char instance [overlap ok] (Integral a) => ToJson (Ratio a) instance [overlap ok] ToJson Double instance [overlap ok] ToJson Integer instance [overlap ok] ToJson Int instance [overlap ok] ToJson Bool instance [overlap ok] (TranslateField t, ToJson t) => Sat (ToJsonD t) instance [overlap ok] (Data TranslateFieldD a) => TranslateField a instance [overlap ok] (TranslateField t) => Sat (TranslateFieldD t) instance [overlap ok] Show JsonData