pub fn peel_alias<F>(ty: &Type, is_alias: F) -> Typewhere F: Fn(&str) -> bool,
Walk an alias chain via underlying_ty (preserves substitution); cycle guard defends against chains that slip past circular_type_alias.
underlying_ty
circular_type_alias