@@ -11,11 +11,7 @@ use crate::data_structures::HashMap;
1111use crate :: inherent:: * ;
1212use crate :: { self as ty, Interner , TypingMode , UniverseIndex } ;
1313
14- #[ derive_where( Clone ; I : Interner , V : Clone ) ]
15- #[ derive_where( Hash ; I : Interner , V : Hash ) ]
16- #[ derive_where( PartialEq ; I : Interner , V : PartialEq ) ]
17- #[ derive_where( Eq ; I : Interner , V : Eq ) ]
18- #[ derive_where( Debug ; I : Interner , V : fmt:: Debug ) ]
14+ #[ derive_where( Clone , Hash , PartialEq , Debug ; I : Interner , V ) ]
1915#[ derive_where( Copy ; I : Interner , V : Copy ) ]
2016#[ cfg_attr(
2117 feature = "nightly" ,
@@ -26,14 +22,12 @@ pub struct CanonicalQueryInput<I: Interner, V> {
2622 pub typing_mode : TypingMode < I > ,
2723}
2824
25+ impl < I : Interner , V : Eq > Eq for CanonicalQueryInput < I , V > { }
26+
2927/// A "canonicalized" type `V` is one where all free inference
3028/// variables have been rewritten to "canonical vars". These are
3129/// numbered starting from 0 in order of first appearance.
32- #[ derive_where( Clone ; I : Interner , V : Clone ) ]
33- #[ derive_where( Hash ; I : Interner , V : Hash ) ]
34- #[ derive_where( PartialEq ; I : Interner , V : PartialEq ) ]
35- #[ derive_where( Eq ; I : Interner , V : Eq ) ]
36- #[ derive_where( Debug ; I : Interner , V : fmt:: Debug ) ]
30+ #[ derive_where( Clone , Hash , PartialEq , Debug ; I : Interner , V ) ]
3731#[ derive_where( Copy ; I : Interner , V : Copy ) ]
3832#[ cfg_attr(
3933 feature = "nightly" ,
@@ -45,6 +39,8 @@ pub struct Canonical<I: Interner, V> {
4539 pub variables : I :: CanonicalVarKinds ,
4640}
4741
42+ impl < I : Interner , V : Eq > Eq for Canonical < I , V > { }
43+
4844impl < I : Interner , V > Canonical < I , V > {
4945 /// Allows you to map the `value` of a canonical while keeping the
5046 /// same set of bound variables.
@@ -89,7 +85,7 @@ impl<I: Interner, V: fmt::Display> fmt::Display for Canonical<I, V> {
8985/// canonical value. This is sufficient information for code to create
9086/// a copy of the canonical value in some other inference context,
9187/// with fresh inference variables replacing the canonical values.
92- #[ derive_where( Clone , Copy , Hash , PartialEq , Eq , Debug ; I : Interner ) ]
88+ #[ derive_where( Clone , Copy , Hash , PartialEq , Debug ; I : Interner ) ]
9389#[ cfg_attr(
9490 feature = "nightly" ,
9591 derive( Decodable_NoContext , Encodable_NoContext , HashStable_NoContext )
@@ -116,6 +112,8 @@ pub enum CanonicalVarKind<I: Interner> {
116112 PlaceholderConst ( I :: PlaceholderConst ) ,
117113}
118114
115+ impl < I : Interner > Eq for CanonicalVarKind < I > { }
116+
119117impl < I : Interner > CanonicalVarKind < I > {
120118 pub fn universe ( self ) -> UniverseIndex {
121119 match self {
@@ -224,7 +222,7 @@ pub enum CanonicalTyVarKind {
224222/// vectors with the original values that were replaced by canonical
225223/// variables. You will need to supply it later to instantiate the
226224/// canonicalized query response.
227- #[ derive_where( Clone , Copy , Hash , PartialEq , Eq , Debug ; I : Interner ) ]
225+ #[ derive_where( Clone , Copy , Hash , PartialEq , Debug ; I : Interner ) ]
228226#[ cfg_attr(
229227 feature = "nightly" ,
230228 derive( Encodable_NoContext , Decodable_NoContext , HashStable_NoContext )
@@ -234,6 +232,8 @@ pub struct CanonicalVarValues<I: Interner> {
234232 pub var_values : I :: GenericArgs ,
235233}
236234
235+ impl < I : Interner > Eq for CanonicalVarValues < I > { }
236+
237237impl < I : Interner > CanonicalVarValues < I > {
238238 pub fn is_identity ( & self ) -> bool {
239239 self . var_values . iter ( ) . enumerate ( ) . all ( |( bv, arg) | match arg. kind ( ) {
0 commit comments