title: Implicit conversions weirdness
body: <p>I am trying to understand why exactly an implicit conversion is working in one case, but not in the other. 
  Here is an example:</p>
  
  <pre><code>   case class Wrapper[T](wrapped: T)
     trait Wrapping { implicit def wrapIt[T](x: Option[T]) = x.map(Wrapper(_))
  
     class NotWorking extends Wrapping { def foo: Option[Wrapper[String]] = Some("foo") }
  
     class Working extends Wrapping { 
        def foo: Option[Wrapper[String]] = {
          val why = Some("foo")
          why
        }
      }
  </code></pre>
  
  <p>Basically, I have  an implicit conversion from <code>Option[T]</code> to <code>Option[Wrapper[T]]</code>, and am trying to define a function, that returns an optional string, that gets implicitly wrapped. </p>
  
  <p>The question is why, when I try to return <code>Option[String]</code> directly (<code>NotWorking</code> above), I get an error (<code>found   : String("foo") required: Wrapper[String]</code>), that goes away if I assign the result to a val before returning it. </p>
  
  <p>What gives?</p>