7 Handling errors and exceptions
In this chapter
- Holding error information with the 
Eithertype - Handling errors with the biased 
Resulttype - Accessing and manipulating 
Resultdata - Lifting functions to operate on 
Result 
In chapter 6, you learned how to deal with optional data without having to manipulate null references using the Option data type. As you saw, this data type is perfect for dealing with the absence of data when that isn’t the result of an error. But it’s not an efficient way to handle errors because, although it allows you to cleanly report the absence of data, it swallows the cause of the absence. All missing data is treated the same way, and it’s up to the caller to try to figure out what happened. Often, this is impossible.
In this chapter, you’ll work through a variety of exercises that teach you how to handle errors and exceptions in Kotlin. One skill you’ll learn is how to represent the absence of data due to an error, which the Option type doesn’t allow. We’ll first look at the problems that need solving, and then we’ll explore the Either type and the Result type:
- The 
Eithertype is useful for functions that can return values of two different types. - The 
Resulttype is useful when you need a type that represents either data or an error. 
After some discussion and exercises using the Either and Result types, you’ll look at advanced Result handling and applying effects, and you’ll also see an advanced Result composition.