title: Who invented proxy passing and when?
body: <p>It seems that until recent years, the usual way to pass an extra type to a function was to do something like</p>
  
  <pre><code>f (undefined :: T)
  </code></pre>
  
  <p>Kiselyov and Shan even used this approach in their classic paper on class-based reflection that inspired the <code>reflection</code> package. They excused the obvious ugliness by noting that the bogus value is never inspected. And an only slightly less ugly incarnation appears in <code>Data.Bits.finiteBitSize</code>, which takes a value it ignores to get its type.</p>
  
  <p>Then <em>someone</em> figured out the proxy idiom, and everything changed. Now we always see the much more satisfactory</p>
  
  <pre><code>f (Proxy :: Proxy T)
  </code></pre>
  
  <p>(in standard code&mdash;GHC type application is another story).</p>
  
  <p>Who figured it out? Did this first appear in code somewhere, or a paper?</p>