title: Why is seq bad?
body: <p>Haskell has a magical function named <code>seq</code>, which takes an argument of any type and reduces it to <em>Weak Head Normal Form</em> (WHNF).</p>
  
  <p>I've read a couple of sources [not that I can remember who they were <em>now</em>...] which claim that "polymorphic <code>seq</code> is bad". In what way are they "bad"?</p>
  
  <p>Similarly, there is the <code>rnf</code> function, which reduces an argument to <em>Normal Form</em> (NF). But <em>this</em> is a class method; it does not work for arbitrary types. It seems "obvious" to me that one could alter the language spec to provide this as a built-in primitive, similar to <code>seq</code>. This, presumably, would be "even more bad" than just having <code>seq</code>. In what way is this so?</p>
  
  <p>Finally, somebody suggested that giving <code>seq</code>, <code>rnf</code>, <code>par</code> and similars the same type as the <code>id</code> function, rather than the <code>const</code> function as it is now, would be an improvement. How so?</p>