Either Error Success

Either Error Success

67afd2b4c98c9befd18c19f0ee9d94dc?s=128

Tim McGilchrist

May 24, 2018
Tweet

Transcript

  1. None
  2. Either Error Success FP-SYD 2018

  3. 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
  4. –Mark H “I have people sitting around solutionizing”

  5. Examples • Code

  6. –Nick H “I will admit human error played a large

    part”
  7. 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
  8. Exception Pattern • Code

  9. Exception Pattern • type signature doesn’t indicate errors • exceptions

    compose without effort • no stack traces by default • dealing with exceptions properly is hard
  10. EitherT Pattern • Code

  11. 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
  12. Transformers Either • Code

  13. Either Examples • mismi - wrapper around Amazonka • mafia

    - cabal build tool • boris - continuous integration / builds
  14. Exception Examples • http-client - http library • stack -

    Haskell build tool ++ • hs-tls - Native Haskell TLS / SSL implementation
  15. Conclusion • make error behaviour explicit • use appropriate tool

    for the job • EitherT yields more maintainable code • similar or less effort to exceptions
  16. 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