I found this article to be informative: "The three kinds of Haskell exceptions and how to use them" (Arnaud Spiwack, Tweag)