@@ -32,8 +32,7 @@ import Data.Object
3232import Data.Object.Raw
3333import System.IO.Unsafe
3434import Control.Arrow (first, (***))
35−import Control.Monad (replicateM)
36−import Data.Attempt
35+import Control.Monad (replicateM, liftM)
3736import qualified Data.Attempt.Helper as A
3837import Control.Monad.Trans
3938import Control.Monad.Attempt
@@ -68,7 +67,7 @@ decodeFile path = liftIO (B.readFile path) >>= decode'
6867encode' :: (StrictByteString bs, ToObject o Raw Raw) => o -> IO bs
6968encode' o =
7069 let events = objectToEvents $ toObject o
71− result = withEmitter $ flip emitEvents $ events
70+ result = withEmitter $ flip emitEvents events
7271 in fromStrictByteString `fmap` A.join result
7372
7473decode' :: (StrictByteString bs, FromObject o Raw Raw, MonadIO m,
@@ -77,7 +76,11 @@ decode' :: (StrictByteString bs, FromObject o Raw Raw, MonadIO m,
7776 -> m o
7877decode' bs = do
7978 events <- liftIO $ withParser (toStrictByteString bs) parserParse
80− attempt failure (fromObject . eventsToRawObject) events
79+ attempt failure (myFA . fromObject . eventsToRawObject) events
80+ where
81+ myFA :: MonadAttempt m => Attempt v -> m v
82+ myFA (Success v) = return v
83+ myFA (Failure e) = failure e
8184
8285objectToEvents :: RawObject -> [Event]
8386objectToEvents y = concat
@@ -132,7 +135,7 @@ newtype MyString = MyString String
132135instance ToScalar MyString Raw where
133136 toScalar (MyString s) = toScalar s
134137instance FromScalar MyString Raw where
135− fromScalar raw = MyString `fmap` fromScalar raw
138+ fromScalar raw = MyString `liftM` fromScalar raw
136139
137140propEncodeDecode :: Object MyString MyString -> Bool
138141propEncodeDecode o = fromAttempt (decode (encode o :: B.ByteString))