View Slide
Either Error SuccessFP-SYD 2018
Introduction• who, what, why, where, how questions• who -> Tim McGilchrist @lambda_foo• what -> exciting area of error handling• where -> in Haskell mostly• how -> with functions and data types
–Mark H“I have people sitting around solutionizing”
Examples• Code
–Nick H“I will admit human error played a large part”
The Async Problem• Asynchronous exceptions are a feature of Haskell• No fancy effect systems or modular IO effects• Deal with it!• Code in IO can fail at any point with an exception
Exception Pattern• Code
Exception Pattern• type signature doesn’t indicate errors• exceptions compose without effort• no stack traces by default • dealing with exceptions properly is hard
EitherT Pattern• Code
EitherT Pattern• pattern matching has your back• composition is explicit (you need to think)• application stack traces• constrained exception handling• extra work• interfacing with exception heavy code
Transformers Either• Code
Either Examples• mismi - wrapper around Amazonka• mafia - cabal build tool• boris - continuous integration / builds
Exception Examples• http-client - http library• stack - Haskell build tool ++• hs-tls - Native Haskell TLS / SSL implementation
Conclusion• make error behaviour explicit• use appropriate tool for thejob• EitherT yields moremaintainable code• similar or less effort toexceptions
Resources• https://simonmar.github.io/posts/2017-01-24-asynchronous-exceptions.html• https://haskell-lang.org/library/safe-exceptions• https://www.fpcomplete.com/blog/2016/11/exceptions-best-practices-haskell• https://simonmar.github.io/bib/papers/async.pdf