title: What's the reason of 'let rec' for impure functional language OCaml?
body: <p>In the book <a href="https://realworldocaml.org/v1/en/html/variables-and-functions.html#declaring-functions-with-function">Real World OCaml</a>, the authors put why OCaml uses <code>let rec</code> for defining recursive functions. </p>
  
  <blockquote>
    <p>OCaml distinguishes between nonrecursive definitions (using let) and recursive definitions (using let rec) largely for technical reasons: the type-inference algorithm needs to know when a set of function definitions are mutually recursive, and for reasons that don't apply to a pure language like Haskell, these have to be marked explicitly by the programmer.</p>
  </blockquote>
  
  <p>What are the technical reasons that enforces <code>let rec</code> while pure functional languages not?</p>