Você pode melhorar este 'algoritmo de linhas de código' em F #?

Eu escrevi um pequeno script para percorrer arquivos em pastas para contar linhas de código.

O coração do script é essa função para contar linhas de espaço em branco, comentários e código. (Observe que, no momento, ele é feito sob medida para o C # e não sabe sobre comentários de várias linhas).

Isso não parece muito legal para mim - alguém tem uma versão mais limpa?

// from list of strings return tuple with count of (whitespace, comments, code)
let loc (arr:List<string>) = 
    let innerloc (whitesp, comment, code) (l:string) = 
        let s = l.Trim([|' ';'\t'|]) // remove leading whitespace
        match s with
        | "" -> (whitesp + 1, comment, code)        //blank lines
        | "{" -> (whitesp + 1, comment, code)       //opening blocks
        | "}" -> (whitesp + 1, comment, code)       //closing blocks
        | _ when s.StartsWith("#") -> (whitesp + 1, comment, code)  //regions
        | _ when s.StartsWith("//") -> (whitesp, comment + 1, code) //comments
        | _ -> (whitesp, comment, code + 1)

    List.fold_left innerloc (0,0,0) arr

questionAnswers(3)

yourAnswerToTheQuestion