(almost) Always use `ObligationCtxt` when dealing with canonical queries Hope this is a step in the right direction. cc rust-lang/types-team#50. r? `@lcnr`
For high-level intro to how type checking works in rustc, see the type checking chapter of the rustc dev guide.