pub fn process_type_aliases(expr: &mut Expr, type_aliases: Vec<TypeAlias>) -> WeldResult<()> {
    let mut type_map = HashMap::new();
    for alias in type_aliases.into_iter() {
        let (name, mut ty) = (alias.name, alias.ty);
        // This imposes the requirement that types are defined before they are used
        // in other aliases, which prevents confusing situations where nested aliases
        // are then redefined and the alias type becomes ambiguous.
        update_alias(&mut ty, &type_map)?;

        // Overrides name if its already in the type_map.
        type_map.insert(name, ty);
    }
    type_alias_helper(expr, &type_map)
}
Replace alias types in the AST with real ones.
weld/src/syntax/macro_processor.rs