@@ -33,10 +33,8 @@ import Data.Object.Raw
3333import System.IO.Unsafe
3434import Control.Arrow (first, (***))
3535import Control.Monad (replicateM, liftM)
36−import qualified Data.Attempt.Helper as A
3736import Control.Monad.Trans
3837import Control.Monad.Attempt
39−import Control.Monad.Attempt.Class
4038
4139import Test.Framework (testGroup, Test)
4240import Test.Framework.Providers.HUnit
@@ -44,10 +42,12 @@ import Test.Framework.Providers.QuickCheck (testProperty)
4442import Test.HUnit hiding (Test, path)
4543import Test.QuickCheck
4644
45+import Control.Exception
46+
4747encode :: (StrictByteString bs, ToObject o Raw Raw) => o -> bs
4848encode = unsafePerformIO . encode'
4949
50−decode :: (StrictByteString bs, FromObject o Raw Raw, MonadAttempt m)
50+decode :: (StrictByteString bs, FromObject o Raw Raw, MonadFailure SomeException m)
5151 => bs
5252 -> m o
5353decode bs = unsafePerformIO $ do
@@ -59,7 +59,7 @@ decode bs = unsafePerformIO $ do
5959encodeFile :: ToObject o Raw Raw => FilePath -> o -> IO ()
6060encodeFile path o = encode' o >>= B.writeFile path
6161
62−decodeFile :: (FromObject o Raw Raw, MonadAttempt m, MonadIO m)
62+decodeFile :: (FromObject o Raw Raw, MonadFailure SomeException m, MonadIO m)
6363 => FilePath
6464 -> m o
6565decodeFile path = liftIO (B.readFile path) >>= decode'
@@ -68,19 +68,19 @@ encode' :: (StrictByteString bs, ToObject o Raw Raw) => o -> IO bs
6868encode' o =
6969 let events = objectToEvents $ toObject o
7070 result = withEmitter $ flip emitEvents events
71− in fromStrictByteString `fmap` A.join result
71+ in fromStrictByteString `fmap` joinAttempt result
7272
7373decode' :: (StrictByteString bs, FromObject o Raw Raw, MonadIO m,
74− MonadAttempt m)
74+ MonadFailure SomeException m)
7575 => bs
7676 -> m o
7777decode' bs = do
7878 events <- liftIO $ withParser (toStrictByteString bs) parserParse
79− attempt failure (myFA . fromObject . eventsToRawObject) events
79+ attempt failure' (myFA . fromObject . eventsToRawObject) events
8080 where
81− myFA :: MonadAttempt m => Attempt v -> m v
82− myFA (Success v) = return v
83− myFA (Failure e) = failure e
81+ myFA = attempt failure' return
82+ failure' :: (MonadFailure SomeException m, Exception e) => e -> m a
83+ failure' = failure . SomeException
8484
8585objectToEvents :: RawObject -> [Event]
8686objectToEvents y = concat