title: declaration order in let-bindings, Haskell vs OCaml
body: <p>In Haskell, declaration order in let/where constructs does not matter, for example:</p>
  
  <pre><code>f x = let g1 x y = if x&gt;y then show x else g2 y x
            g2 p q = g1 q p
        in ...
  </code></pre>
  
  <p>where <code>g2</code> used in <code>g1</code> before its declaration.
  But this is not a case in Ocaml:</p>
  
  <pre><code># let a = b in
    let b = 5 in
    a;;
  Warning 26: unused variable b.
  Error: Unbound value b
  </code></pre>
  
  <p>Is there a reason why OCaml doesn't behave like Haskell? In the absence of forward declaration, this feature seems useful to me.</p>
  
  <p>Is it because of strict evaluation in OCaml but lazy in Haskell?</p>