How do I know if a function is tail recursive in F#
I wrote the follwing function:

    let str2lst str =
        let rec f s acc =
          match s with
            | "" -> acc
            | _  -> f (s.Substring 1) (s.[0]::acc)
        f str []

How can I know if the F# compiler turned it into a loop? Is there a way to find out without using Reflector (I have no experience with Reflector and I Don't know C#)?

Edit: Also, is it possible to write a tail recursive function without using an inner function, or is it necessary for the loop to reside in?

Also, Is there a function in F# std lib to run a given function a number of times, each time giving it the last output as input? Lets say I have a string, I want to run a function over the string then run it again over the resultant string and so on...
How do I know if a function is tail recursive in F#
===

I wrote the follwing function:

    let str2lst str =
        let rec f s acc =
          match s with
            | "" -> acc
            | _  -> f (s.Substring 1) (s.[0]::acc)
        f str []

How can I know if the F# compiler turned it into a loop? Is there a way to find out without using Reflector (I have no experience with Reflector and I Don't know C#)?

Edit: Also, is it possible to write a tail recursive function without using an inner function, or is it necessary for the loop to reside in?

Also, Is there a function in F# std lib to run a given function a number of times, each time giving it the last output as input? Lets say I have a string, I want to run a function over the string then run it again over the resultant string and so on...