data-object 0.0.1 → 0.0.2
raw patch · 2 files changed
+60/−21 lines, 2 filesdep +safePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: safe
API changes (from Hackage documentation)
- Data.Object: data Object
- Data.Object: instance [overlap ok] Show Object
+ Data.Object: data GenObject key val
+ Data.Object: instance [overlap ok] (Show key, Show val) => Show (GenObject key val)
+ Data.Object: instance [overlap ok] FromObject Bool
+ Data.Object: instance [overlap ok] FromObject Int
+ Data.Object: instance [overlap ok] FromScalar Bool
+ Data.Object: instance [overlap ok] FromScalar Int
+ Data.Object: instance [overlap ok] ToObject Bool
+ Data.Object: instance [overlap ok] ToObject Int
+ Data.Object: instance [overlap ok] ToScalar Bool
+ Data.Object: instance [overlap ok] ToScalar Int
+ Data.Object: type Object = GenObject ByteString ByteString
- Data.Object: Mapping :: [(ByteString, Object)] -> Object
+ Data.Object: Mapping :: [(key, GenObject key val)] -> GenObject key val
- Data.Object: Scalar :: ByteString -> Object
+ Data.Object: Scalar :: val -> GenObject key val
- Data.Object: Sequence :: [Object] -> Object
+ Data.Object: Sequence :: [GenObject key val] -> GenObject key val
Files
- Data/Object.hs +57/−19
- data-object.cabal +3/−2
Data/Object.hs view
@@ -18,7 +18,8 @@ -- --------------------------------------------------------- module Data.Object- ( Object (..)+ ( Object+ , GenObject (..) , FromObject (..) , ToObject (..) , FromScalar (..)@@ -26,17 +27,21 @@ , oLookup ) where -import qualified Data.ByteString as B+import qualified Data.ByteString.Lazy as B+import qualified Data.ByteString as BS import Data.ByteString.Class import Control.Arrow import Data.Time.Calendar+import Safe (readMay) -data Object =- Mapping [(B.ByteString, Object)]- | Sequence [Object]- | Scalar B.ByteString+data GenObject key val =+ Mapping [(key, GenObject key val)]+ | Sequence [GenObject key val]+ | Scalar val deriving (Show) +type Object = GenObject B.ByteString B.ByteString+ class ToObject a where toObject :: a -> Object class FromObject a where@@ -60,10 +65,19 @@ instance FromObject B.ByteString where fromObject = bsFromObject +instance ToScalar BS.ByteString where+ toScalar = toLazyByteString+instance FromScalar BS.ByteString where+ fromScalar = return . fromLazyByteString+instance ToObject BS.ByteString where+ toObject = Scalar . toScalar+instance FromObject BS.ByteString where+ fromObject o = fromObject o >>= fromScalar+ instance ToScalar String where- toScalar = toStrictByteString+ toScalar = toLazyByteString instance FromScalar String where- fromScalar = return . fromStrictByteString+ fromScalar = return . fromLazyByteString instance ToObject String where toObject = Scalar . toScalar instance FromObject String where@@ -105,26 +119,50 @@ Nothing -> fail $ "Key not found: " ++ show key Just x -> fromObject x --- helper-readM :: (Read r, Monad m) => String -> m r-readM s = case reads s of- ((x, _):_) -> return x- _ -> fail $ "Unable to read: " ++ s -- instances instance ToScalar Day where- toScalar = toStrictByteString . show+ toScalar = toLazyByteString . show instance ToObject Day where toObject = toObject . toScalar instance FromScalar Day where fromScalar bs = do- let s = fromStrictByteString bs+ let s = fromLazyByteString bs if length s /= 10 then fail ("Invalid day: " ++ s) else do- y <- readM $ take 4 s- m <- readM $ take 2 $ drop 5 s- d <- readM $ take 2 $ drop 8 s- return $ fromGregorian y m d+ let x = do+ y' <- readMay $ take 4 s+ m' <- readMay $ take 2 $ drop 5 s+ d' <- readMay $ take 2 $ drop 8 s+ return (y', m', d')+ case x of+ Just (y, m, d) -> return $ fromGregorian y m d+ Nothing -> fail $ "Invalid day: " ++ s instance FromObject Day where+ fromObject o = fromObject o >>= fromScalar++instance ToScalar Bool where+ toScalar b = toScalar $ if b then "true" else "false"+instance ToObject Bool where+ toObject = toObject . toScalar+instance FromScalar Bool where+ fromScalar bs =+ case fromLazyByteString bs of+ "true" -> return True+ "false" -> return False+ x -> fail $ "Invalid bool value: " ++ x+instance FromObject Bool where+ fromObject o = fromObject o >>= fromScalar++instance ToScalar Int where+ toScalar = toScalar . show+instance ToObject Int where+ toObject = toObject . toScalar+instance FromScalar Int where+ fromScalar bs =+ case readMay $ fromLazyByteString bs of+ Nothing -> fail $ "Invalid integer: " ++ fromLazyByteString bs+ Just i -> return i+instance FromObject Int where fromObject o = fromObject o >>= fromScalar
data-object.cabal view
@@ -1,5 +1,5 @@ name: data-object-version: 0.0.1+version: 0.0.2 license: BSD3 license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -19,6 +19,7 @@ build-depends: base >= 4 && < 5, bytestring-class, bytestring >= 0.9.1.4 && < 1,- time >= 1+ time >= 1,+ safe exposed-modules: Data.Object ghc-options: -Wall