Reading input from the console in F#
Some small comments

    let tuple = handleChar c lines builder
    let newLines = fst tuple
    let newbuilder = snd tuple
    getLines newLines newbuilder


can become

    let newlines,newbuilder = handleChar c lines builder
    getLines newLines newbuilder


although, if you aren't using getLines anywhere else, there is a good argument for making it

handleChar c lines builder |&gt; getLines


by makeing getLines take its argument in tupled form.

The magic number 10 appears a few times, so I would add a literal like

[&lt;Literal&gt;]
let newline = 10


and then you can pattern match against it.

Also,

Lines @ [s]


is bad as @ is very slow.  You are better to use

s::Lines


and then reverse the list at the end.

Your format for reading the characters recursively should be fine as it will get optimised as a tail-call.

Of course, your entire program could be replaced by:

let rec procinput lines= 
    match Console.ReadLine() with
    | null -&gt; List.rev lines
    | "" -&gt; procinput lines
    | s -&gt; procinput (s::lines)