4 Handling errors without exceptions

 

This chapter covers

  • Discussing the disadvantages of exceptions
  • Introducing the Option data type
  • Introducing the Either data type
  • Introducing the Try data type

We noted briefly in chapter 1 that throwing exceptions is a side effect. If exceptions aren’t used in functional code, what is used instead? In this chapter, we’ll learn the basic principles for raising and handling errors functionally. The big idea is that we can represent failures and exceptions with ordinary values, and we can write higher-order functions that abstract out common patterns of error handling and recovery. The functional solution of returning errors as values is safer and retains referential transparency, and through the use of higher-order functions, we can preserve the primary benefit of exceptions: consolidation of error-handling logic. We’ll see how this works over the course of this chapter after we take a closer look at exceptions and discuss some of their problems.

4.1 The good and bad aspects of exceptions

4.2 Possible alternatives to exceptions

4.3 The Option data type

4.3.1 Usage patterns for Option

4.3.2 Option composition, lifting, and wrapping exception-oriented APIs

4.4 The Either data type

4.4.1 Accumulating errors

4.4.2 Extracting a Validated type

4.5 Conclusion

Summary

4.6 Exercise answers