
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 -> Cheers Christian