title: the seq function and strictness
body: <p>I have been wondering about this a lot, but I haven't been able to find anything about it.</p>
  
  <p>When using the <code>seq</code> function, how does it then <em>really</em> work? Everywhere, it is just explained saying that <code>seq a b</code> evaluates <code>a</code>, discards the result and returns <code>b</code>.</p>
  
  <p>But what does that <em>really</em> mean? Would the following result in strict evaluation:</p>
  
  <pre><code>foo s t = seq q (bar q t) where
        q = s*t
  </code></pre>
  
  <p>What I mean is, is <code>q</code> strictly evaluated before being used in <code>bar</code>? And would the following be equivalent:</p>
  
  <pre><code>foo s t = seq (s*t) (bar (s*t) t)
  </code></pre>
  
  <p>I find it a little hard getting specifics on the functionality of this function.</p>