title: What does it mean when "method exists but trait bounds not satisfied"?
body: <p>I'm new to Rust and observed something that I couldn't reason against.</p>
  
  <p>When I write </p>
  
  <pre><code>fn main() {
      ('a'..'z').all(|_| true);
  }
  </code></pre>
  
  <p>The compiler reports an error:</p>
  
  <pre class="lang-none prettyprint-override"><code>error[E0599]: no method named `all` found for type `std::ops::Range&lt;char&gt;` in the current scope
   --&gt; src/main.rs:2:16
    |
  2 |     ('a'..'z').all(|_| true)
    |                ^^^
    |
    = note: the method `all` exists but the following trait bounds were not satisfied:
            `std::ops::Range&lt;char&gt; : std::iter::Iterator`
  </code></pre>
  
  <p>When I change it to </p>
  
  <pre><code>fn main() {
      (b'a'..b'z').all(|_| true);
  }
  </code></pre>
  
  <p>it compiles.</p>
  
  <p>What's happening here? What does Rust mean when it says <code>the method ... exists but the following trait bounds were not satisfied</code>?</p>