Parsing command line arguments
I am also new to F#, so I have just 2 small annotations:

The function that parses the string to Int32 can be simplified:

match System.Int32.TryParse(str) with
    | (true, x) when x &gt;= 0 &amp;&amp; x &lt;= 20 -&gt; Some x
    | _ -&gt; None


The last case of the function parseTopLevel should be _ -&gt; instead of x -&gt; because the value is not used ('_' expresses exactly that)