@@ -32,8 +32,7 @@ import Data.Object
32import Data.Object.Raw
32import Data.Object.Raw
33import System.IO.Unsafe
33import System.IO.Unsafe
34import Control.Arrow (first, (***))
34import Control.Arrow (first, (***))
35−import Control.Monad (replicateM)
35+import Control.Monad (replicateM, liftM)
37import qualified Data.Attempt.Helper as A
36import qualified Data.Attempt.Helper as A
38import Control.Monad.Trans
37import Control.Monad.Trans
39import Control.Monad.Attempt
38import Control.Monad.Attempt
@@ -68,7 +67,7 @@ decodeFile path = liftIO (B.readFile path) >>= decode'
68encode' :: (StrictByteString bs, ToObject o Raw Raw) => o -> IO bs
67encode' :: (StrictByteString bs, ToObject o Raw Raw) => o -> IO bs
69encode' o =
68encode' o =
70 let events = objectToEvents $ toObject o
69 let events = objectToEvents $ toObject o
71− result = withEmitter $ flip emitEvents $ events
70+ result = withEmitter $ flip emitEvents events
72 in fromStrictByteString `fmap` A.join result
71 in fromStrictByteString `fmap` A.join result
74decode' :: (StrictByteString bs, FromObject o Raw Raw, MonadIO m,
73decode' :: (StrictByteString bs, FromObject o Raw Raw, MonadIO m,
@@ -77,7 +76,11 @@ decode' :: (StrictByteString bs, FromObject o Raw Raw, MonadIO m,
78decode' bs = do
77decode' bs = do
79 events <- liftIO $ withParser (toStrictByteString bs) parserParse
78 events <- liftIO $ withParser (toStrictByteString bs) parserParse
80− attempt failure (fromObject . eventsToRawObject) events
79+ attempt failure (myFA . fromObject . eventsToRawObject) events
81+ myFA :: MonadAttempt m => Attempt v -> m v
82+ myFA (Success v) = return v
83+ myFA (Failure e) = failure e
82objectToEvents :: RawObject -> [Event]
85objectToEvents :: RawObject -> [Event]
83objectToEvents y = concat
86objectToEvents y = concat
@@ -132,7 +135,7 @@ newtype MyString = MyString String
132instance ToScalar MyString Raw where
135instance ToScalar MyString Raw where
133 toScalar (MyString s) = toScalar s
136 toScalar (MyString s) = toScalar s
134instance FromScalar MyString Raw where
137instance FromScalar MyString Raw where
135− fromScalar raw = MyString `fmap` fromScalar raw
138+ fromScalar raw = MyString `liftM` fromScalar raw
137propEncodeDecode :: Object MyString MyString -> Bool
140propEncodeDecode :: Object MyString MyString -> Bool
138propEncodeDecode o = fromAttempt (decode (encode o :: B.ByteString))
141propEncodeDecode o = fromAttempt (decode (encode o :: B.ByteString))