Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Either Error Success
Tim McGilchrist
May 24, 2018
Programming
0
46
Either Error Success
Tim McGilchrist
May 24, 2018
Tweet
Share
More Decks by Tim McGilchrist
See All by Tim McGilchrist
lambda_foo
0
54
lambda_foo
1
32
lambda_foo
0
52
lambda_foo
3
530
Other Decks in Programming
See All in Programming
junmikai
0
300
zwass
0
160
hirotokirimaru
1
440
mu2in
0
150
koher
7
700
yokaze
0
450
masayaaoyama
4
860
siketyan
1
120
akatsukinewgrad
0
230
ufoo68
1
180
kyoheig3
0
440
nbkouhou
1
1.3k
Featured
See All Featured
denniskardys
220
120k
chriscoyier
145
19k
trallard
13
650
tenderlove
52
3.4k
3n
163
22k
orderedlist
PRO
329
35k
lauravandoore
11
1.3k
cromwellryan
101
5.9k
danielanewman
1
480
brad_frost
156
6.4k
akmur
252
19k
jlugia
216
16k
Transcript
None
Either Error Success FP-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 the job • EitherT yields more maintainable code • similar or less effort to exceptions
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