# Type alias where clause before equals

type Alias<T> where T: Copy = T;

==>

SourceFile(
  TypeItem(
    type,
    TypeIdentifier,
    TypeParamList(TypeIdentifier),
    WhereClause(where, TypeBoundClause(TypeIdentifier, TraitBounds(TypeIdentifier))),
    TypeIdentifier))

# Public type alias with a where clause

pub type Alias<T> where T: Copy = T;

==>

SourceFile(
  TypeItem(
    Vis(pub),
    type,
    TypeIdentifier,
    TypeParamList(TypeIdentifier),
    WhereClause(where, TypeBoundClause(TypeIdentifier, TraitBounds(TypeIdentifier))),
    TypeIdentifier))

# Type alias with multiple where predicates

type Pair<T, U> where T: Copy, U: Clone = (T, U);

==>

SourceFile(
  TypeItem(
    type,
    TypeIdentifier,
    TypeParamList(TypeIdentifier, TypeIdentifier),
    WhereClause(
      where,
      TypeBoundClause(TypeIdentifier, TraitBounds(TypeIdentifier)),
      TypeBoundClause(TypeIdentifier, TraitBounds(TypeIdentifier))),
    TupleType(TypeIdentifier, TypeIdentifier)))
