title: Require a trait to implement a Distribution<T> for the Standard Distribution
body: <p>I am trying to build a trait that requires implementors to implment the Distribution for the Standard distribution of the <code>rand</code> crate.</p>
  <p>I have recently learn how to make this a trait implementor to also implement the display trait with <a href="https://doc.rust-lang.org/book/ch19-03-advanced-traits.html#using-supertraits-to-require-one-traits-functionality-within-another-trait" rel="nofollow noreferrer">SuperTraits</a> and I would like to do a similar thing for the trait bound <code>Standard: Distribution&lt;Self&gt;</code>. I can add this trait bound with a where clause as such:</p>
  <pre><code>use rand::{Rng, distributions::{Distribution, Standard}}; // rand 0.7
  use std::fmt;
  
  trait SampleAndDisplay: fmt::Display + Sized
  where
      Standard: Distribution&lt;Self&gt;
  {
      fn other_requirement() -&gt; u16;
  }
  
  // For any type to implement SampleAndDisplay, they need the following at least:
  struct Implementor;
  
  impl SampleAndDisplay for Implementor {
      fn other_requirement() -&gt; u16 {
          // ...
      }
  }
  
  impl fmt::Display for Implementor {
      fn fmt(&amp;self, f: &amp;mut fmt::Formatter&lt;'_&gt;) -&gt; fmt::Result {
          // ...
      }
  }
  
  impl Distribution&lt;Implementor&gt; for Standard {
      fn sample&lt;R: Rng + ?Sized&gt;(&amp;self, rng: &amp;mut R) -&gt; Implementor {
          // ...
      }
  }
  </code></pre>
  <p>But the problem I have with this is I now need to add an additional trait bound whenever I use <code>SampleAndDisplay</code>:</p>
  <pre><code>fn func&lt;T&gt;()
  where
      T: SampleAndDisplay,
      Standard: Distribution&lt;T&gt;, // Would like to not have to always put this
  {
      // ...
  }
  </code></pre>
  <p>In a sense, I think I would like to do the following, but I can't figure out the right syntax, or this is even possible:</p>
  <pre><code>trait SampleAndDisplay: (Standard: Distribution&lt;Self&gt;) + fmt::Display + Sized
  {
      fn other_requirement() -&gt; u16;
  }
  </code></pre>
  <p>Any help is appreciated.</p>