title: How to get the name of a class as a string literal at compile time using shapeless?
body: <p>This is a follow-up question of:</p>
  <p><a href="https://stackoverflow.com/questions/36006772/how-to-get-the-name-of-a-case-class-field-as-a-string-symbol-at-compile-time-usi">How to get the name of a case class field as a string/symbol at compile time using shapeless?</a></p>
  <p>Assuming that I want to write a recursive converter that can convert a product type:</p>
  <pre class="lang-scala prettyprint-override"><code>case class Prod (
    a: Int,
    b: String
  )
  </code></pre>
  <p>into a Record, but unlike the above question which uses each case class fields (a, b) as keys, I want to use each class name or type/type-constructor name directly. So this product type becomes a Record at compile time:</p>
  <pre><code>&quot;Int&quot; -&gt;&gt; Int
  &quot;String&quot; -&gt;&gt; String
  </code></pre>
  <p>(probably not a good enough use case, but you got the idea)</p>
  <p>One key step of this is to use reflection to get the name of each class at compile time, and convert them into Singleton types or shapeless witness. I wonder if this capability is already provided somewhere? Or do I absolutely need a whitebox macro to make it happen?</p>