packages feed

data-object-json 0.0.0.1 → 0.3.0

raw patch · 2 files changed

+102/−99 lines, 2 filesdep +JSONbdep +failuredep +textdep −attemptdep −json-bdep −sybdep ~convertible-textdep ~data-objectPVP ok

version bump matches the API change (PVP)

Dependencies added: JSONb, failure, text

Dependencies removed: attempt, json-b, syb

Dependency ranges changed: convertible-text, data-object

API changes (from Hackage documentation)

- Data.Object.Json: JsonDecodeError :: String -> JsonDecodeError
- Data.Object.Json: JsonDoc :: ByteString -> JsonDoc
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object ByteString ByteString)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object ByteString String)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object ByteString Text)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String ByteString)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String JsonScalar)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String String)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object String Text)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text ByteString)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text JsonScalar)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text String)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) (Object Text Text)
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) ByteString
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) JsonScalar
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) String
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) Text
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Object ByteString Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(ByteString, Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object ByteString JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Object String Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(String, Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object ByteString JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text ByteString)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text JsonScalar)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Object Text Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, String)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [(Text, Text)]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object ByteString Text]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object String Text]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text ByteString]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text JsonScalar]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Object Text Text]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [String]
- Data.Object.Json: instance ConvertAttempt (Object ByteString JsonScalar) [Text]
- Data.Object.Json: instance ConvertAttempt ByteString JsonScalar
- Data.Object.Json: instance ConvertAttempt JsonDoc JsonObject
- Data.Object.Json: instance ConvertAttempt JsonObject JSON
- Data.Object.Json: instance ConvertAttempt JsonScalar ByteString
- Data.Object.Json: instance ConvertAttempt JsonScalar String
- Data.Object.Json: instance ConvertAttempt JsonScalar Text
- Data.Object.Json: instance ConvertAttempt String JsonScalar
- Data.Object.Json: instance ConvertAttempt Text JsonScalar
- Data.Object.Json: instance ConvertSuccess (Object ByteString ByteString) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object ByteString String) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object ByteString Text) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String ByteString) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String JsonScalar) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String String) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object String Text) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text ByteString) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text JsonScalar) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text String) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess (Object Text Text) (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess ByteString (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess ByteString JsonScalar
- Data.Object.Json: instance ConvertSuccess JSON JsonObject
- Data.Object.Json: instance ConvertSuccess JsonObject JsonDoc
- Data.Object.Json: instance ConvertSuccess JsonScalar (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess JsonScalar ByteString
- Data.Object.Json: instance ConvertSuccess JsonScalar String
- Data.Object.Json: instance ConvertSuccess JsonScalar Text
- Data.Object.Json: instance ConvertSuccess String (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess String JsonScalar
- Data.Object.Json: instance ConvertSuccess Text (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess Text JsonScalar
- Data.Object.Json: instance ConvertSuccess [(ByteString, ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Object ByteString Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(ByteString, Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object ByteString JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Object String Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(String, Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object ByteString JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text ByteString)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text JsonScalar)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Object Text Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, String)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [(Text, Text)] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object ByteString Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object String Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text ByteString] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text JsonScalar] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Object Text Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [String] (Object ByteString JsonScalar)
- Data.Object.Json: instance ConvertSuccess [Text] (Object ByteString JsonScalar)
- Data.Object.Json: instance Eq JsonDoc
- Data.Object.Json: instance Show JsonDoc
- Data.Object.Json: newtype JsonDecodeError
- Data.Object.Json: newtype JsonDoc
- Data.Object.Json: readJsonDoc :: FilePath -> IO JsonDoc
- Data.Object.Json: unJsonDoc :: JsonDoc -> ByteString
- Data.Object.Json: writeJsonDoc :: FilePath -> JsonDoc -> IO ()
+ Data.Object.Json: class (Eq a) => IsJsonScalar a
+ Data.Object.Json: decodeFile :: (Failure JsonDecodeError m) => (ConvertSuccess ByteString k) => (IsJsonScalar v) => FilePath -> IO (m (Object k v))
+ Data.Object.Json: encodeFile :: (ConvertSuccess k ByteString, IsJsonScalar v) => FilePath -> Object k v -> IO ()
+ Data.Object.Json: fromJsonScalar :: (IsJsonScalar a) => JsonScalar -> a
+ Data.Object.Json: instance Data JsonScalar
+ Data.Object.Json: instance Eq JsonScalar
+ Data.Object.Json: instance IsJsonScalar ByteString
+ Data.Object.Json: instance IsJsonScalar JsonScalar
+ Data.Object.Json: instance IsJsonScalar Text
+ Data.Object.Json: instance IsJsonScalar [Char]
+ Data.Object.Json: instance Read JsonScalar
+ Data.Object.Json: instance Show JsonScalar
+ Data.Object.Json: instance Typeable JsonScalar
+ Data.Object.Json: toJsonScalar :: (IsJsonScalar a) => a -> JsonScalar
- Data.Object.Json: decode :: (MonadFailure JsonDecodeError m) => ByteString -> m JsonObject
+ Data.Object.Json: decode :: (Failure JsonDecodeError m) => (ConvertSuccess ByteString k) => (IsJsonScalar v) => ByteString -> m (Object k v)
- Data.Object.Json: encode :: JsonObject -> ByteString
+ Data.Object.Json: encode :: (ConvertSuccess k ByteString, IsJsonScalar v) => Object k v -> ByteString
- Data.Object.Json: fromJsonObject :: (ConvertAttempt JsonObject a) => JsonObject -> Attempt a
+ Data.Object.Json: fromJsonObject :: (ConvertSuccess ByteString k) => (IsJsonScalar v) => JsonObject -> Object k v
- Data.Object.Json: toJsonObject :: (ConvertSuccess a JsonObject) => a -> JsonObject
+ Data.Object.Json: toJsonObject :: (ConvertSuccess k ByteString) => (IsJsonScalar v) => Object k v -> JsonObject

Files

Data/Object/Json.hs view
@@ -1,9 +1,6 @@-{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE TemplateHaskell #-} --------------------------------------------------------- -- -- Module        : Data.Object.Json@@ -13,139 +10,145 @@ -- Maintainer    : Michael Snoyman <michael@snoyman.com> -- Stability     : Stable -- Portability   : portable---------------------------------------------------------- + -- | A simple wrapper around the json-b library which presents values inside -- 'Object's. module Data.Object.Json-    ( -- * Types-      JsonDoc (..)-    , JsonScalar (..)+    ( -- * Definition of 'JsonObject'+      JsonScalar (..)     , JsonObject-      -- * IO-    , readJsonDoc-    , writeJsonDoc-      -- * Serialization-    , JsonDecodeError (..)-    , decode-    , encode-      -- * Specialization+      -- * Automatic scalar conversions+    , IsJsonScalar (..)     , toJsonObject     , fromJsonObject+      -- * Encoding/decoding+    , encode+    , encodeFile+    , decode+    , decodeFile     ) where -import Data.Object.Text-import qualified Data.ByteString as BS-import qualified Data.ByteString.Lazy as BL+import Data.Object import qualified Data.Trie import Control.Arrow-import Control.Applicative ((<$>))-import Data.Generics+import Data.Data import Control.Exception-import Data.Attempt  import Text.JSONb.Simple as J import qualified Text.JSONb.Decode as Decode import qualified Text.JSONb.Encode as Encode --- | A fully formed JSON document.-newtype JsonDoc = JsonDoc { unJsonDoc :: BL.ByteString }-    deriving (Show, Eq)+import qualified Data.Text+import qualified Data.Text.Lazy -readJsonDoc :: FilePath -> IO JsonDoc-readJsonDoc = fmap JsonDoc . BL.readFile+import qualified Data.ByteString+import qualified Data.ByteString.Lazy -writeJsonDoc :: FilePath -> JsonDoc -> IO ()-writeJsonDoc fp = BL.writeFile fp . unJsonDoc+import Data.Convertible.Text (ConvertSuccess, cs)+import Control.Failure  -- | Matches the scalar data types used in json-b so we can have proper mapping -- between the two libraries. data JsonScalar =-    JsonString BS.ByteString+    JsonString Data.ByteString.ByteString     | JsonNumber Rational     | JsonBoolean Bool     | JsonNull--instance ConvertSuccess JsonScalar Text where-    convertSuccess (JsonString b) = convertSuccess b-    convertSuccess (JsonNumber r) = convertSuccess r-    convertSuccess (JsonBoolean b) = convertSuccess b-    convertSuccess JsonNull = convertSuccess ""-instance ConvertSuccess Text JsonScalar where-    convertSuccess = JsonString . convertSuccess+    deriving (Eq, Show, Read, Data, Typeable) -instance ConvertSuccess JsonScalar String where-    convertSuccess = cs . (cs :: JsonScalar -> Text)-instance ConvertSuccess String JsonScalar where-    convertSuccess = JsonString . cs+jsToBS :: JsonScalar -> Data.ByteString.ByteString+jsToBS (JsonString b) = b+jsToBS (JsonNumber r) = cs r+jsToBS (JsonBoolean b) = cs b+jsToBS JsonNull = Data.ByteString.empty -instance ConvertSuccess JsonScalar BS.ByteString where-    convertSuccess = cs . (cs :: JsonScalar -> Text)-instance ConvertSuccess BS.ByteString JsonScalar where-    convertSuccess = JsonString . cs+class (Eq a) => IsJsonScalar a where+    fromJsonScalar :: JsonScalar -> a+    toJsonScalar :: a -> JsonScalar+instance IsJsonScalar JsonScalar where+    fromJsonScalar = id+    toJsonScalar = id+instance IsJsonScalar Data.Text.Text where+    fromJsonScalar = cs . jsToBS+    toJsonScalar = JsonString . cs+instance IsJsonScalar Data.Text.Lazy.Text where+    fromJsonScalar = cs . jsToBS+    toJsonScalar = JsonString . cs+instance IsJsonScalar [Char] where+    fromJsonScalar = cs . jsToBS+    toJsonScalar = JsonString . cs+instance IsJsonScalar Data.ByteString.ByteString where+    fromJsonScalar = jsToBS+    toJsonScalar = JsonString+instance IsJsonScalar Data.ByteString.Lazy.ByteString where+    fromJsonScalar = cs . jsToBS+    toJsonScalar = JsonString . cs -$(let types = [''String, ''BS.ByteString, ''Text]-   in deriveAttempts $-        [(k, ''JsonScalar) | k <- types] ++-        [(''JsonScalar, v) | v <- types])+toJsonObject :: ConvertSuccess k Data.ByteString.ByteString+             => IsJsonScalar v+             => Object k v+             -> JsonObject+toJsonObject = mapKeysValues cs toJsonScalar -$(deriveSuccessConvs ''BS.ByteString ''JsonScalar-    [''String, ''BS.ByteString, ''Text]-    [''String, ''BS.ByteString, ''Text, ''JsonScalar])+fromJsonObject :: ConvertSuccess Data.ByteString.ByteString k+               => IsJsonScalar v+               => JsonObject+               -> Object k v+fromJsonObject = mapKeysValues cs fromJsonScalar  -- | Meant to match closely with the 'JSON' data type. Therefore, uses strict -- byte strings for keys and the 'JsonScalar' type for scalars.-type JsonObject = Object BS.ByteString JsonScalar+type JsonObject = Object Data.ByteString.ByteString JsonScalar -instance ConvertSuccess JSON JsonObject where-    convertSuccess (J.Object trie) =-        Mapping . map (second cs) $ Data.Trie.toList trie-    convertSuccess (J.Array a) = Sequence $ map cs $ a-    convertSuccess (J.String bs) = Scalar $ JsonString bs-    convertSuccess (J.Number r) = Scalar $ JsonNumber r-    convertSuccess (J.Boolean b) = Scalar $ JsonBoolean b-    convertSuccess J.Null = Scalar JsonNull-instance ConvertAttempt JsonObject JSON where-    convertAttempt (Scalar (JsonString bs)) = return $ J.String bs-    convertAttempt (Scalar (JsonNumber r)) = return $ J.Number r-    convertAttempt (Scalar (JsonBoolean b)) = return $ J.Boolean b-    convertAttempt (Scalar JsonNull) = return J.Null-    convertAttempt (Sequence s) = J.Array <$> mapM ca s-    convertAttempt (Mapping m) =-        J.Object . Data.Trie.fromList <$> mapM-        (runKleisli $ second $ Kleisli ca) m+jsonToJO :: JSON -> JsonObject+jsonToJO (J.Object trie) =+    Mapping . map (second jsonToJO) $ Data.Trie.toList trie+jsonToJO (J.Array a) = Sequence $ map jsonToJO $ a+jsonToJO (J.String bs) = Scalar $ JsonString bs+jsonToJO (J.Number r) = Scalar $ JsonNumber r+jsonToJO (J.Boolean b) = Scalar $ JsonBoolean b+jsonToJO J.Null = Scalar JsonNull +joToJSON :: JsonObject -> JSON+joToJSON (Scalar (JsonString bs)) = J.String bs+joToJSON (Scalar (JsonNumber r)) = J.Number r+joToJSON (Scalar (JsonBoolean b)) = J.Boolean b+joToJSON (Scalar JsonNull) = J.Null+joToJSON (Sequence s) = J.Array $ map joToJSON s+joToJSON (Mapping m) =+    J.Object $ Data.Trie.fromList $ map (second joToJSON) m+ -- | Error type for JSON decoding errors. newtype JsonDecodeError = JsonDecodeError String     deriving (Show, Typeable) instance Exception JsonDecodeError  -- | Decode a lazy bytestring into a 'JsonObject'.-decode :: MonadFailure JsonDecodeError m-       => BL.ByteString-       -> m JsonObject-decode = either (failure . JsonDecodeError . fst)-                (return . toJsonObject)+decode :: Failure JsonDecodeError m+       => ConvertSuccess Data.ByteString.ByteString k+       => IsJsonScalar v+       => Data.ByteString.ByteString+       -> m (Object k v)+decode = either (failure . JsonDecodeError)+                (return . fromJsonObject . jsonToJO)        . Decode.decode  -- | Encode a 'JsonObject' into a lazy bytestring.-encode :: JsonObject-       -> BL.ByteString-encode = Encode.encode Encode.Compact-       . fromSuccess-       . fromJsonObject---- | 'convertSuccess' specialized for 'JsonObject's-toJsonObject :: ConvertSuccess a JsonObject => a -> JsonObject-toJsonObject = cs+encode :: (ConvertSuccess k Data.ByteString.ByteString, IsJsonScalar v)+       => Object k v+       -> Data.ByteString.ByteString+encode = Encode.encode Encode.Compact . joToJSON . toJsonObject --- | 'convertAttempt' specialized for 'JsonObject's-fromJsonObject :: ConvertAttempt JsonObject a-               => JsonObject-               -> Attempt a-fromJsonObject = ca+encodeFile :: (ConvertSuccess k Data.ByteString.ByteString, IsJsonScalar v)+           => FilePath+           -> Object k v+           -> IO ()+encodeFile fp = Data.ByteString.writeFile fp . encode -instance ConvertSuccess JsonObject JsonDoc where-    convertSuccess = JsonDoc . encode-instance ConvertAttempt JsonDoc JsonObject where-    convertAttempt = decode . unJsonDoc+decodeFile :: Failure JsonDecodeError m+           => ConvertSuccess Data.ByteString.ByteString k+           => IsJsonScalar v+           => FilePath+           -> IO (m (Object k v))+decodeFile fp = decode `fmap` Data.ByteString.readFile fp
data-object-json.cabal view
@@ -1,5 +1,5 @@ name:            data-object-json-version:         0.0.0.1+version:         0.3.0 license:         BSD3 license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>@@ -13,12 +13,12 @@  library     build-depends:   base >= 4 && < 5,-                     json-b >= 0.0.4 && < 0.1,+                     JSONb >= 1.0 && < 1.1,                      bytestring-trie >= 0.1.4 && < 0.2,                      bytestring >= 0.9.1.4 && < 0.10,-                     data-object >= 0.2.0 && < 0.3,-                     attempt >= 0.2.0 && < 0.3,-                     convertible-text >= 0.2.0.4 && < 0.3,-                     syb+                     data-object >= 0.3.0 && < 0.4,+                     convertible-text >= 0.3.0 && < 0.4,+                     failure >= 0.1.0 && < 0.2,+                     text >= 0.7.1 && < 0.8     exposed-modules: Data.Object.Json     ghc-options:     -Wall