Skip to content

Commit

Permalink
Clean up StructuralEq docs
Browse files Browse the repository at this point in the history
  • Loading branch information
camelid committed Nov 6, 2020
1 parent f2bbdd0 commit b813c72
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions library/core/src/marker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,18 +156,18 @@ pub trait StructuralPartialEq {
/// Required trait for constants used in pattern matches.
///
/// Any type that derives `Eq` automatically implements this trait, *regardless*
/// of whether its type-parameters implement `Eq`.
/// of whether its type parameters implement `Eq`.
///
/// This is a hack to workaround a limitation in our type-system.
/// This is a hack to work around a limitation in our type system.
///
/// Background:
/// # Background
///
/// We want to require that types of consts used in pattern matches
/// have the attribute `#[derive(PartialEq, Eq)]`.
///
/// In a more ideal world, we could check that requirement by just checking that
/// the given type implements both (1.) the `StructuralPartialEq` trait *and*
/// (2.) the `Eq` trait. However, you can have ADTs that *do* `derive(PartialEq, Eq)`,
/// the given type implements both the `StructuralPartialEq` trait *and*
/// the `Eq` trait. However, you can have ADTs that *do* `derive(PartialEq, Eq)`,
/// and be a case that we want the compiler to accept, and yet the constant's
/// type fails to implement `Eq`.
///
Expand All @@ -176,8 +176,11 @@ pub trait StructuralPartialEq {
/// ```rust
/// #[derive(PartialEq, Eq)]
/// struct Wrap<X>(X);
///
/// fn higher_order(_: &()) { }
///
/// const CFN: Wrap<fn(&())> = Wrap(higher_order);
///
/// fn main() {
/// match CFN {
/// CFN => {}
Expand Down

0 comments on commit b813c72

Please sign in to comment.