title: Generic parameter is lost in `Supplier` lambda but not in `Callable`
body: <p>Can anybody explain why generic parameter is lost in <code>Supplier</code> lambda but not in <code>Callable</code>?</p>
  
  <p>I created interface that captures generic type and helper function that instantiates it</p>
  
  <pre><code>abstract class TypeRef&lt;T&gt; protected constructor() {
      val type: Type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
  
      override fun toString(): String {
          return type.toString()
      }
  }
  
  inline fun &lt;reified T&gt; getTypeRef(): TypeRef&lt;T&gt; {
      return object: TypeRef&lt;T&gt;() {};
  }
  </code></pre>
  
  <p>But testing it leads to different results depending on where it's called</p>
  
  <pre><code>inline fun &lt;reified T&gt; testTypeRef(): TypeRef&lt;T&gt; {
      val ref0 = getTypeRef&lt;T&gt;()
      println("In root $ref0")
  
      Callable {
          val ref1 = getTypeRef&lt;T&gt;()
          println("In callable $ref1")
      }.call()
  
      Supplier {
          val ref2 = getTypeRef&lt;T&gt;()
          println("In supplier $ref2")
          ""
      }.get()
  
      return ref0
  }
  </code></pre>
  
  <p>produces </p>
  
  <pre><code>In root java.util.List&lt;? extends java.util.concurrent.atomic.AtomicReference&lt;java.lang.String&gt;&gt;
  In callable java.util.List&lt;? extends java.util.concurrent.atomic.AtomicReference&lt;java.lang.String&gt;&gt;
  In supplier T
  </code></pre>
  
  <p>What am I missing ?</p>