Improve naming in WherePredicate
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index d5ebc75..e5aed1e 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -314,6 +314,12 @@
 
 fn fold_poly_trait_ref(&mut self, i: PolyTraitRef) -> PolyTraitRef { fold_poly_trait_ref(self, i) }
 
+fn fold_predicate_eq(&mut self, i: PredicateEq) -> PredicateEq { fold_predicate_eq(self, i) }
+
+fn fold_predicate_lifetime(&mut self, i: PredicateLifetime) -> PredicateLifetime { fold_predicate_lifetime(self, i) }
+
+fn fold_predicate_type(&mut self, i: PredicateType) -> PredicateType { fold_predicate_type(self, i) }
+
 fn fold_qself(&mut self, i: QSelf) -> QSelf { fold_qself(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_range_limits(&mut self, i: RangeLimits) -> RangeLimits { fold_range_limits(self, i) }
@@ -394,16 +400,10 @@
 
 fn fold_visibility(&mut self, i: Visibility) -> Visibility { fold_visibility(self, i) }
 
-fn fold_where_bound_predicate(&mut self, i: WhereBoundPredicate) -> WhereBoundPredicate { fold_where_bound_predicate(self, i) }
-
 fn fold_where_clause(&mut self, i: WhereClause) -> WhereClause { fold_where_clause(self, i) }
 
-fn fold_where_eq_predicate(&mut self, i: WhereEqPredicate) -> WhereEqPredicate { fold_where_eq_predicate(self, i) }
-
 fn fold_where_predicate(&mut self, i: WherePredicate) -> WherePredicate { fold_where_predicate(self, i) }
 
-fn fold_where_region_predicate(&mut self, i: WhereRegionPredicate) -> WhereRegionPredicate { fold_where_region_predicate(self, i) }
-
 }
 
 pub fn fold_ident<V: Folder + ?Sized>(_visitor: &mut V, mut _i: Ident) -> Ident {
@@ -2314,6 +2314,31 @@
     }
 }
 
+pub fn fold_predicate_eq<V: Folder + ?Sized>(_visitor: &mut V, _i: PredicateEq) -> PredicateEq {
+    PredicateEq {
+        lhs_ty: _visitor.fold_type(_i . lhs_ty),
+        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
+        rhs_ty: _visitor.fold_type(_i . rhs_ty),
+    }
+}
+
+pub fn fold_predicate_lifetime<V: Folder + ?Sized>(_visitor: &mut V, _i: PredicateLifetime) -> PredicateLifetime {
+    PredicateLifetime {
+        lifetime: _visitor.fold_lifetime(_i . lifetime),
+        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
+    }
+}
+
+pub fn fold_predicate_type<V: Folder + ?Sized>(_visitor: &mut V, _i: PredicateType) -> PredicateType {
+    PredicateType {
+        bound_lifetimes: (_i . bound_lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
+        bounded_ty: _visitor.fold_type(_i . bounded_ty),
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
+        bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
+    }
+}
+
 pub fn fold_qself<V: Folder + ?Sized>(_visitor: &mut V, _i: QSelf) -> QSelf {
     QSelf {
         lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i . lt_token).0)),
@@ -2815,15 +2840,6 @@
     }
 }
 
-pub fn fold_where_bound_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereBoundPredicate) -> WhereBoundPredicate {
-    WhereBoundPredicate {
-        bound_lifetimes: (_i . bound_lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
-        bounded_ty: _visitor.fold_type(_i . bounded_ty),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
-        bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_type_param_bound(it) }),
-    }
-}
-
 pub fn fold_where_clause<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereClause) -> WhereClause {
     WhereClause {
         where_token: Token ! [ where ](tokens_helper(_visitor, &(_i . where_token).0)),
@@ -2831,39 +2847,23 @@
     }
 }
 
-pub fn fold_where_eq_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereEqPredicate) -> WhereEqPredicate {
-    WhereEqPredicate {
-        lhs_ty: _visitor.fold_type(_i . lhs_ty),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
-        rhs_ty: _visitor.fold_type(_i . rhs_ty),
-    }
-}
-
 pub fn fold_where_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WherePredicate) -> WherePredicate {
     match _i {
-        WherePredicate::BoundPredicate(_binding_0, ) => {
-            WherePredicate::BoundPredicate (
-                _visitor.fold_where_bound_predicate(_binding_0),
+        WherePredicate::Type(_binding_0, ) => {
+            WherePredicate::Type (
+                _visitor.fold_predicate_type(_binding_0),
             )
         }
-        WherePredicate::RegionPredicate(_binding_0, ) => {
-            WherePredicate::RegionPredicate (
-                _visitor.fold_where_region_predicate(_binding_0),
+        WherePredicate::Lifetime(_binding_0, ) => {
+            WherePredicate::Lifetime (
+                _visitor.fold_predicate_lifetime(_binding_0),
             )
         }
-        WherePredicate::EqPredicate(_binding_0, ) => {
-            WherePredicate::EqPredicate (
-                _visitor.fold_where_eq_predicate(_binding_0),
+        WherePredicate::Eq(_binding_0, ) => {
+            WherePredicate::Eq (
+                _visitor.fold_predicate_eq(_binding_0),
             )
         }
     }
 }
 
-pub fn fold_where_region_predicate<V: Folder + ?Sized>(_visitor: &mut V, _i: WhereRegionPredicate) -> WhereRegionPredicate {
-    WhereRegionPredicate {
-        lifetime: _visitor.fold_lifetime(_i . lifetime),
-        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
-        bounds: FoldHelper::lift(_i . bounds, |it| { _visitor.fold_lifetime(it) }),
-    }
-}
-
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index eb23394..9d75054 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -310,6 +310,12 @@
 
 fn visit_poly_trait_ref(&mut self, i: &'ast PolyTraitRef) { visit_poly_trait_ref(self, i) }
 
+fn visit_predicate_eq(&mut self, i: &'ast PredicateEq) { visit_predicate_eq(self, i) }
+
+fn visit_predicate_lifetime(&mut self, i: &'ast PredicateLifetime) { visit_predicate_lifetime(self, i) }
+
+fn visit_predicate_type(&mut self, i: &'ast PredicateType) { visit_predicate_type(self, i) }
+
 fn visit_qself(&mut self, i: &'ast QSelf) { visit_qself(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_range_limits(&mut self, i: &'ast RangeLimits) { visit_range_limits(self, i) }
@@ -390,16 +396,10 @@
 
 fn visit_visibility(&mut self, i: &'ast Visibility) { visit_visibility(self, i) }
 
-fn visit_where_bound_predicate(&mut self, i: &'ast WhereBoundPredicate) { visit_where_bound_predicate(self, i) }
-
 fn visit_where_clause(&mut self, i: &'ast WhereClause) { visit_where_clause(self, i) }
 
-fn visit_where_eq_predicate(&mut self, i: &'ast WhereEqPredicate) { visit_where_eq_predicate(self, i) }
-
 fn visit_where_predicate(&mut self, i: &'ast WherePredicate) { visit_where_predicate(self, i) }
 
-fn visit_where_region_predicate(&mut self, i: &'ast WhereRegionPredicate) { visit_where_region_predicate(self, i) }
-
 }
 
 
@@ -1798,6 +1798,25 @@
     _visitor.visit_path(& _i . trait_ref);
 }
 
+pub fn visit_predicate_eq<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PredicateEq) {
+    _visitor.visit_type(& _i . lhs_ty);
+    tokens_helper(_visitor, &(& _i . eq_token).0);
+    _visitor.visit_type(& _i . rhs_ty);
+}
+
+pub fn visit_predicate_lifetime<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PredicateLifetime) {
+    _visitor.visit_lifetime(& _i . lifetime);
+    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
+    for el in & _i . bounds { let it = el.item(); _visitor.visit_lifetime(it) };
+}
+
+pub fn visit_predicate_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast PredicateType) {
+    if let Some(ref it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes(it) };
+    _visitor.visit_type(& _i . bounded_ty);
+    tokens_helper(_visitor, &(& _i . colon_token).0);
+    for el in & _i . bounds { let it = el.item(); _visitor.visit_type_param_bound(it) };
+}
+
 pub fn visit_qself<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast QSelf) {
     tokens_helper(_visitor, &(& _i . lt_token).0);
     _visitor.visit_type(& * _i . ty);
@@ -2162,41 +2181,22 @@
     }
 }
 
-pub fn visit_where_bound_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereBoundPredicate) {
-    if let Some(ref it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes(it) };
-    _visitor.visit_type(& _i . bounded_ty);
-    tokens_helper(_visitor, &(& _i . colon_token).0);
-    for el in & _i . bounds { let it = el.item(); _visitor.visit_type_param_bound(it) };
-}
-
 pub fn visit_where_clause<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereClause) {
     tokens_helper(_visitor, &(& _i . where_token).0);
     for el in & _i . predicates { let it = el.item(); _visitor.visit_where_predicate(it) };
 }
 
-pub fn visit_where_eq_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereEqPredicate) {
-    _visitor.visit_type(& _i . lhs_ty);
-    tokens_helper(_visitor, &(& _i . eq_token).0);
-    _visitor.visit_type(& _i . rhs_ty);
-}
-
 pub fn visit_where_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WherePredicate) {
     match *_i {
-        WherePredicate::BoundPredicate(ref _binding_0, ) => {
-            _visitor.visit_where_bound_predicate(_binding_0);
+        WherePredicate::Type(ref _binding_0, ) => {
+            _visitor.visit_predicate_type(_binding_0);
         }
-        WherePredicate::RegionPredicate(ref _binding_0, ) => {
-            _visitor.visit_where_region_predicate(_binding_0);
+        WherePredicate::Lifetime(ref _binding_0, ) => {
+            _visitor.visit_predicate_lifetime(_binding_0);
         }
-        WherePredicate::EqPredicate(ref _binding_0, ) => {
-            _visitor.visit_where_eq_predicate(_binding_0);
+        WherePredicate::Eq(ref _binding_0, ) => {
+            _visitor.visit_predicate_eq(_binding_0);
         }
     }
 }
 
-pub fn visit_where_region_predicate<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast WhereRegionPredicate) {
-    _visitor.visit_lifetime(& _i . lifetime);
-    if let Some(ref it) = _i . colon_token { tokens_helper(_visitor, &(it).0) };
-    for el in & _i . bounds { let it = el.item(); _visitor.visit_lifetime(it) };
-}
-
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 4a38b74..b091a36 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -310,6 +310,12 @@
 
 fn visit_poly_trait_ref_mut(&mut self, i: &mut PolyTraitRef) { visit_poly_trait_ref_mut(self, i) }
 
+fn visit_predicate_eq_mut(&mut self, i: &mut PredicateEq) { visit_predicate_eq_mut(self, i) }
+
+fn visit_predicate_lifetime_mut(&mut self, i: &mut PredicateLifetime) { visit_predicate_lifetime_mut(self, i) }
+
+fn visit_predicate_type_mut(&mut self, i: &mut PredicateType) { visit_predicate_type_mut(self, i) }
+
 fn visit_qself_mut(&mut self, i: &mut QSelf) { visit_qself_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_range_limits_mut(&mut self, i: &mut RangeLimits) { visit_range_limits_mut(self, i) }
@@ -390,16 +396,10 @@
 
 fn visit_visibility_mut(&mut self, i: &mut Visibility) { visit_visibility_mut(self, i) }
 
-fn visit_where_bound_predicate_mut(&mut self, i: &mut WhereBoundPredicate) { visit_where_bound_predicate_mut(self, i) }
-
 fn visit_where_clause_mut(&mut self, i: &mut WhereClause) { visit_where_clause_mut(self, i) }
 
-fn visit_where_eq_predicate_mut(&mut self, i: &mut WhereEqPredicate) { visit_where_eq_predicate_mut(self, i) }
-
 fn visit_where_predicate_mut(&mut self, i: &mut WherePredicate) { visit_where_predicate_mut(self, i) }
 
-fn visit_where_region_predicate_mut(&mut self, i: &mut WhereRegionPredicate) { visit_where_region_predicate_mut(self, i) }
-
 }
 
 
@@ -1798,6 +1798,25 @@
     _visitor.visit_path_mut(& mut _i . trait_ref);
 }
 
+pub fn visit_predicate_eq_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PredicateEq) {
+    _visitor.visit_type_mut(& mut _i . lhs_ty);
+    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
+    _visitor.visit_type_mut(& mut _i . rhs_ty);
+}
+
+pub fn visit_predicate_lifetime_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PredicateLifetime) {
+    _visitor.visit_lifetime_mut(& mut _i . lifetime);
+    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
+    for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
+}
+
+pub fn visit_predicate_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut PredicateType) {
+    if let Some(ref mut it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
+    _visitor.visit_type_mut(& mut _i . bounded_ty);
+    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
+    for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
+}
+
 pub fn visit_qself_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut QSelf) {
     tokens_helper(_visitor, &mut (& mut _i . lt_token).0);
     _visitor.visit_type_mut(& mut * _i . ty);
@@ -2162,41 +2181,22 @@
     }
 }
 
-pub fn visit_where_bound_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereBoundPredicate) {
-    if let Some(ref mut it) = _i . bound_lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
-    _visitor.visit_type_mut(& mut _i . bounded_ty);
-    tokens_helper(_visitor, &mut (& mut _i . colon_token).0);
-    for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_type_param_bound_mut(it) };
-}
-
 pub fn visit_where_clause_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereClause) {
     tokens_helper(_visitor, &mut (& mut _i . where_token).0);
     for mut el in & mut _i . predicates { let it = el.item_mut(); _visitor.visit_where_predicate_mut(it) };
 }
 
-pub fn visit_where_eq_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereEqPredicate) {
-    _visitor.visit_type_mut(& mut _i . lhs_ty);
-    tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
-    _visitor.visit_type_mut(& mut _i . rhs_ty);
-}
-
 pub fn visit_where_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WherePredicate) {
     match *_i {
-        WherePredicate::BoundPredicate(ref mut _binding_0, ) => {
-            _visitor.visit_where_bound_predicate_mut(_binding_0);
+        WherePredicate::Type(ref mut _binding_0, ) => {
+            _visitor.visit_predicate_type_mut(_binding_0);
         }
-        WherePredicate::RegionPredicate(ref mut _binding_0, ) => {
-            _visitor.visit_where_region_predicate_mut(_binding_0);
+        WherePredicate::Lifetime(ref mut _binding_0, ) => {
+            _visitor.visit_predicate_lifetime_mut(_binding_0);
         }
-        WherePredicate::EqPredicate(ref mut _binding_0, ) => {
-            _visitor.visit_where_eq_predicate_mut(_binding_0);
+        WherePredicate::Eq(ref mut _binding_0, ) => {
+            _visitor.visit_predicate_eq_mut(_binding_0);
         }
     }
 }
 
-pub fn visit_where_region_predicate_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut WhereRegionPredicate) {
-    _visitor.visit_lifetime_mut(& mut _i . lifetime);
-    if let Some(ref mut it) = _i . colon_token { tokens_helper(_visitor, &mut (it).0) };
-    for mut el in & mut _i . bounds { let it = el.item_mut(); _visitor.visit_lifetime_mut(it) };
-}
-
diff --git a/src/generics.rs b/src/generics.rs
index 94cadca..6698621 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -164,7 +164,7 @@
     /// A single predicate in a `where` clause
     pub enum WherePredicate {
         /// A type binding, e.g. `for<'c> Foo: Send+Clone+'c`
-        pub BoundPredicate(WhereBoundPredicate {
+        pub Type(PredicateType {
             /// Any lifetimes from a `for` binding
             pub bound_lifetimes: Option<BoundLifetimes>,
             /// The type being bounded
@@ -175,14 +175,14 @@
         }),
 
         /// A lifetime predicate, e.g. `'a: 'b+'c`
-        pub RegionPredicate(WhereRegionPredicate {
+        pub Lifetime(PredicateLifetime {
             pub lifetime: Lifetime,
             pub colon_token: Option<Token![:]>,
             pub bounds: Punctuated<Lifetime, Token![+]>,
         }),
 
         /// An equality predicate (unsupported)
-        pub EqPredicate(WhereEqPredicate {
+        pub Eq(PredicateEq {
             pub lhs_ty: Type,
             pub eq_token: Token![=],
             pub rhs_ty: Type,
@@ -381,7 +381,7 @@
                     colon.is_some(),
                     Punctuated::parse_separated
                 ) >>
-                (WherePredicate::RegionPredicate(WhereRegionPredicate {
+                (WherePredicate::Lifetime(PredicateLifetime {
                     lifetime: ident,
                     bounds: bounds.unwrap_or_default(),
                     colon_token: colon,
@@ -393,7 +393,7 @@
                 bounded_ty: syn!(Type) >>
                 colon: punct!(:) >>
                 bounds: call!(Punctuated::parse_separated_nonempty) >>
-                (WherePredicate::BoundPredicate(WhereBoundPredicate {
+                (WherePredicate::Type(PredicateType {
                     bound_lifetimes: bound_lifetimes,
                     bounded_ty: bounded_ty,
                     bounds: bounds,
@@ -581,7 +581,7 @@
         }
     }
 
-    impl ToTokens for WhereBoundPredicate {
+    impl ToTokens for PredicateType {
         fn to_tokens(&self, tokens: &mut Tokens) {
             self.bound_lifetimes.to_tokens(tokens);
             self.bounded_ty.to_tokens(tokens);
@@ -590,7 +590,7 @@
         }
     }
 
-    impl ToTokens for WhereRegionPredicate {
+    impl ToTokens for PredicateLifetime {
         fn to_tokens(&self, tokens: &mut Tokens) {
             self.lifetime.to_tokens(tokens);
             if !self.bounds.is_empty() {
@@ -600,7 +600,7 @@
         }
     }
 
-    impl ToTokens for WhereEqPredicate {
+    impl ToTokens for PredicateEq {
         fn to_tokens(&self, tokens: &mut Tokens) {
             self.lhs_ty.to_tokens(tokens);
             self.eq_token.to_tokens(tokens);
diff --git a/src/lib.rs b/src/lib.rs
index 74a13bd..c7862a9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -42,8 +42,8 @@
 
 mod generics;
 pub use generics::{BoundLifetimes, ConstParam, GenericParam, Generics, LifetimeDef,
-                   TraitBoundModifier, TypeParam, TypeParamBound, WhereBoundPredicate,
-                   WhereClause, WhereEqPredicate, WherePredicate, WhereRegionPredicate};
+                   PredicateEq, PredicateLifetime, PredicateType, TraitBoundModifier,
+                   TypeParam, TypeParamBound, WhereClause, WherePredicate};
 #[cfg(feature = "printing")]
 pub use generics::{ImplGenerics, Turbofish, TypeGenerics};