Hello!
I'm confused by the error handling in Haskell. I've written a program that uses a combined monad of type:
type MyMonad a = ErrorT MyErrorType (StateT MyStateType IO) a
(MyErrorType is an instance of Error)

Therefore, to handle IO Errors inside of MyMonad I need to write:
foo :: MyMonad a
foo = do ...
             inp <- liftIO (getChar
                               `catchError`
                               (\e -> if isEOFError e then return '\0'
else return '?') )
             case inp of
                      '\?' -> throwError ...
                      ....
             `catchError`
             myErrorTypeHandler
This of course is cumbersome and ugly and I'm sure there is a way to do better. Helpful advice is welcome!

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now! http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to