Use register_predicate_obligations rather than a for loop, since I didn't see that before. Also destructure in the `let` rather than projecting the fields individually
For high-level intro to how type checking works in rustc, see the type checking chapter of the rustc dev guide.