# Error Handling — Cause, Exit, and Recovery
Part II gave you the full dependency injection story. Part III is about what happens when things go wrong — and in production, things always go wrong.
Rust's `Result<T, E>` is excellent for *expected* errors: outcomes you anticipated and typed. But real programs also encounter *unexpected* failures: panics, OOM conditions, and cancelled fibers. id_effect models all of these with a richer type hierarchy.
This chapter introduces `Cause` (the full error taxonomy), `Exit` (the terminal outcome of any effect), and the combinators for recovering from both.