Skip to content

Commit

Permalink
Add "hir::Ty and ty::Ty" section
Browse files Browse the repository at this point in the history
  • Loading branch information
blyxyas committed Apr 8, 2023
1 parent 90e6ddc commit 1cf6406
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions book/src/development/type_checking.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,21 @@ impl LateLintPass<'_> for MyStructLint {
}
```

## `hir::Ty` and `ty::Ty`

We've been talking about [`ty::Ty`][middle_ty] this whole time without addressing [`hir::Ty`][hir_ty], but the latter
is also important to understand.

`hir::Ty` would represent *what* an user wrote, while `ty::Ty` would understand the meaning of it (because it has more
information).

**Example: `fn foo(x: u32) -> u32 { x }`**

Here the HIR sees the types without "thinking" about them, it knows that the function takes an `u32` and returns
an `u32`. But at the `ty::Ty` level the compiler understands that they're the same type, in-depth lifetimes, etc...

you can use the [`hir_ty_to_ty`][hir_ty_to_ty] function to convert from a `hir::Ty` to a `ty::Ty`

## Useful Links

Below are some useful links to further explore the concepts covered
Expand All @@ -124,3 +139,6 @@ in this chapter:
[Ty]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Ty.html
[TyKind]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html
[TypeckResults]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TypeckResults.html
[middle_ty]: https://doc.rust-lang.org/beta/nightly-rustc/rustc_middle/ty/struct.Ty.html
[hir_ty]: https://doc.rust-lang.org/beta/nightly-rustc/rustc_hir/struct.Ty.html
[hir_ty_to_ty]: https://doc.rust-lang.org/beta/nightly-rustc/rustc_hir_analysis/fn.hir_ty_to_ty.html

0 comments on commit 1cf6406

Please sign in to comment.