In the first two parts of this series, I spent quite some time explaining what's actually happening when you destructure an instance of a case class in a pattern, and how to write your own extractors, allowing you to destructure any types of objects in any way you desire.