title: Singleton types in Haskell
body: <p>As part of doing a survey on various dependently typed formalization techniques, I have ran across a paper advocating the use of singleton types (types with one inhabitant) as a way of supporting dependently typed programming.</p>
  
  <p>Acording to this source, in Haskell, there is a separation betwen runtime values and compile-time types that can be blurred when using singleton types, due to the induced type/value isomorphism. </p>
  
  <p>My question is: How do singleton types differ from type-classes or from quoted/reified structures in this respect? </p>
  
  <p>I would also particularly appreciate some intuitive explaination with respect to the type-theoretical importance/advantages to using singleton types and to the extent to which they can emulate dependent types in general.</p>