# Rust by Example

## 5.3 Alias

The type statement can be used to give a new name to an existing type. Types must have CamelCase names, or the compiler will raise a warning. The exception to this rule are the primitive types: usize, f32, etc.

// NanoSecond is a new name for u64.
type NanoSecond = u64;
type Inch = u64;

// Use an attribute to silence warning.
#[allow(non_camel_case_types)]
type u64_t = u64;
// TODO ^ Try removing the attribute

fn main() {
// NanoSecond = Inch = u64_t = u64.
let nanoseconds: NanoSecond = 5 as u64_t;
let inches: Inch = 2 as u64_t;

// Note that type aliases *don't* provide any extra type safety, because
// aliases are *not* new types
println!("{} nanoseconds + {} inches = {} unit?",
nanoseconds,
inches,
nanoseconds + inches);
}

The main use of aliases is to reduce boilerplate; for example the IoResult<T> type is an alias for the Result<T, IoError> type.