@@ -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 {
@@ -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