# Higher-ranked dyn bound

type Callback = dyn for<'a> Fn(&'a str);

==>

SourceFile(
  TypeItem(
    type,
    TypeIdentifier,
    DynamicType(
      dyn,
      HigherRankedTraitBound(
        for,
        TypeParamList(Lifetime),
        FunctionType(
          TypeIdentifier,
          ParamList(Parameter(ReferenceType(Lifetime, TypeIdentifier))))))))

# Higher-ranked generic trait after dyn Trait

type A = dyn Send + for<'a> Trait<'a>;

==>

SourceFile(
  TypeItem(
    type,
    TypeIdentifier,
    BoundedType(
      DynamicType(dyn, TypeIdentifier),
      HigherRankedTraitBound(
        for,
        TypeParamList(Lifetime),
        GenericType(TypeIdentifier, TypeArgList(Lifetime))))))

# Higher-ranked generic trait after impl Trait

fn f(_: impl Send + for<'a> Trait<'a>) {}

==>

SourceFile(
  FunctionItem(
    fn,
    BoundIdentifier,
    ParamList(
      Parameter(
        _,
        BoundedType(
          AbstractType(impl, TypeIdentifier),
          HigherRankedTraitBound(
            for,
            TypeParamList(Lifetime),
            GenericType(TypeIdentifier, TypeArgList(Lifetime)))))),
    Block))
