- 
                Notifications
    You must be signed in to change notification settings 
- Fork 0
Closed
rust-lang/rust
#144991Description
@petervdonovan provided the following minimization on zulip.
pub trait MapsTmf<E> {
    type Tmf;
}
pub struct BoundedNat;
pub struct Pair<L, R>(std::marker::PhantomData<(L, R)>);
pub trait Heap: Sized
+ MapsTmf<BoundedNat>
+ MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>
+ MapsTmf<Pair<Self::LeftOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::RightOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::Plus, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::Sum, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<BoundedNat>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::LeftOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::RightOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Plus, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Sum, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<<Self as MapsTmf<BoundedNat>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>
+ MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>
+ MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Plus, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>
+ MapsTmf<Pair<<Self as MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
{
    // to trigger the perf issue, we do need multiple associated types involved
    // i.e., replacing all of them with Nat makes the issue go away
    type Plus;
    type LeftOperand;
    type RightOperand;
    type F;
    type Sum;
    type Nat;
}petervdonovan
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
done