title: How to avoid creating new instance of FSharpFunc when calling recursive inner function?
body: <p>Sample:</p>
  
  <pre><code>let inline ReadState() = 
  
      let rec f (w : SpinWait) = 
          if (...) then
              w.SpinOnce()
              f(w)
          else
              result 
  
      f (new SpinWait())
  </code></pre>
  
  <p>Using ILSpy I notice that <code>ReadState()</code> create new instance of <code>FSharpFunc</code> every time it got called</p>
  
  <pre><code>new Memory@f222().Invoke()  // Memory@f222 implement FSharpFunc
  </code></pre>
  
  <p>How to avoid it? </p>
  
  <p>If <code>f not inner fun</code> then <code>no instance created</code> but I will need another named function:</p>
  
  <pre><code>let rec InternalReadState(w : SpinWait) = .... 
  
  let ReadState() = InternalReadState(new SpinWait())
  </code></pre>
  
  <p>not very beauty :(</p>