Simplest part of [[Crab]], simply a collection of alias for number types to reduce ambiguity on primitive types.
| **Type** | **Underlying Type** | When you should use |
| ------------ | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *usize* | `unsigned long long` / `size_t` | Whenever you have a number that should *never* be negative or are storing the length or count of something, <br>*eg.* `for (usize i = 0; i < array.length(); i++)`. |
| *u64* | `unsigned long long` / `uint64_t` | Not much use over *usize*, unless you are trying to do something like store the hash of something (tldr: use *usize*). |
| *u32* | `unsigned int` / `uint32_t` | ^ |
| *u16* | `unsigned short int` / `uint16_t` | ^ |
| *u8* | `unsigned char` / `uint8_t` | Use whenever you are trying to refer to raw data / an array of raw bytes. If you are referring to a *String*, just use the `String`/`std::string` class, or if you *really* need to use a c-style string, use `const char*`. |
| *i64* | `long long`/`signed long long`/`int64_t` | |
| *i32* | `int`/`signed int`/`int32_t` | |
| *i16* | `short int`/`signed short int`/`int16_t` | |
| *i8* | `signed char`/`int32_t` | |
| *String* | `std::string` | |
| *Vec\<T>* | `std::vector<T>` | |
| *StringView* | `std::string_view` | |