title: Unexpected Trait Behavior
body: <p>Given a simple Algebraic Data Type of <code>Parent</code>:</p>
  
  <pre><code>scala&gt; sealed trait Parent
  defined trait Parent
  
  scala&gt; case object Boy extends Parent
  defined object Boy
  
  scala&gt; case object Girl extends Parent
  defined object Girl
  </code></pre>
  
  <p>I defined a trait:</p>
  
  <pre><code>scala&gt; trait HasGirl { 
       |   val x: Girl.type
       | }
  defined trait HasGirl
  </code></pre>
  
  <p>Then, I created a case class that implemented <code>HasGirl</code>, but provided an <code>x</code> value of <code>Boy.type</code>.</p>
  
  <pre><code>scala&gt; case class Thing(x: Boy.type) extends HasGirl
  defined class Thing
  </code></pre>
  
  <p>I had expected a compile-time error, since I don't see how an <code>x</code> of type <code>Boy.type</code> conforms to <code>val x: Girl.type</code>.</p>
  
  <p>What's going on here?</p>