
4 May
2009
4 May
'09
1:05 a.m.
On Sun, May 3, 2009 at 6:36 PM,
I wrote this to make it a little nicer to catch IO exceptions and convert them to ErrorT failure:
onExceptionThrowError :: (Error ce) => IO a -> (String -> ce) -> ErrorT ce IO a onExceptionThrowError a ce = liftIO (try a) >>= either (\(e :: IOException) -> throwError (ce (show e))) return
So now I can do, e.g., writeFile fp s `onExceptionThrowError` SpecificErrorConstructor ...
It works, but seems bad. Please let me know if you see ways to improve it. Thanks.
What about this?
liftCatch :: (IOException -> e) -> IO a -> ErrorT e IO a
liftCatch f m = ErrorT $ liftM (either (Left . f) Right) (try m)
--
Dave Menendez