
On 16 November 2005 17:15, Christian Maeder wrote:
Simon Peyton-Jones wrote:
Indeed! I always use braces and semicolons with do-notation. You are free to do so too! Nothing requires you to use layout. Indeed, you can freely mix the two.
I would not recommend braces and semicolons, because these allow a bad layout (easy to parse for a compiler, but hard to read for a human), unless you invest the time to make a tidy layout despite the braces and semicolons. (So why not only make a tidy layout?)
Surely, a different layout may change your semantics (in rare cases). A missplaced "_ -> error ..." case usually causes a pattern warning.
liftIOTrap io = do mx <- liftIO (do x <- io return (return x) `catchError` (\e -> return (throwError (fromIOError e))))
I'ld rather avoid the infix `catchError' and write:
liftIO $ catchError (do ... ) $ \e ->
I generally prefer to use the "handle" variants rather than "catch": liftIO $ handle my_handler $ do x <- io return (return x) where my_handler e = return (throwError (fromIOError e)) Don't be afraid to name things if it makes your code easier to read. Cheers, Simon