@@ -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> {
116112PlaceholderConst ( 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  { 
@@ -223,7 +221,7 @@ pub enum CanonicalTyVarKind {
223221/// vectors with the original values that were replaced by canonical 
224222/// variables. You will need to supply it later to instantiate the 
225223/// canonicalized query response. 
226- #[ derive_where( Clone ,  Copy ,  Hash ,  PartialEq ,  Eq ,   Debug ;  I :  Interner ) ]  
224+ #[ derive_where( Clone ,  Copy ,  Hash ,  PartialEq ,  Debug ;  I :  Interner ) ]  
227225#[ cfg_attr(  
228226    feature = "nightly" ,  
229227    derive( Encodable_NoContext ,  Decodable_NoContext ,  HashStable_NoContext )  
@@ -233,6 +231,8 @@ pub struct CanonicalVarValues<I: Interner> {
233231    pub  var_values :  I :: GenericArgs , 
234232} 
235233
234+ impl < I :  Interner >  Eq  for  CanonicalVarValues < I >  { } 
235+ 
236236impl < I :  Interner >  CanonicalVarValues < I >  { 
237237    pub  fn  is_identity ( & self )  -> bool  { 
238238        self . var_values . iter ( ) . enumerate ( ) . all ( |( bv,  arg) | match  arg. kind ( )  { 
0 commit comments