On Sun, May 3, 2009 at 6:36 PM,  <br...@lorf.org> wrote:
> 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 <d...@zednenem.com>
<http://www.eyrie.org/~zednenem/>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to