https://medium.com/@andrew_johnson_4/understanding-high-level-intermediate-representation-hir-in-the-rust-compiler-2b1f430aa838