Project Euler 42

http://projecteuler.net/index.php?section=problems&id=42

let read_names (file : string) =

は、

let read_names file =

ではなぜか動きません。

open System
open System.IO

let rec split (str : string) p1 p2 mode =
   if p2 = str.Length then
      []
   else if mode = 0 then
      if str.[p2] = '"' then
         split str (p2 + 1) (p2 + 1) 1
      else
         split str p1 (p2 + 1) 0
   else
      if str.[p2] = '"' then
         str.[p1..p2-1] :: (split str p1 (p2 + 1) 0)
      else
         split str p1 (p2 + 1) 1

let read_names (file : string) =
   let s = new StreamReader(file)
   let str = s.ReadLine()
   s.Close ()
   List.sort (split str 0 0 0)

let to_number s =
   List.sum [ for c in s -> (int c) - (int 'A') + 1 ]
let is_square n =
   let m = int (sqrt (double (n)))
   m * m = n
let is_triangle n = is_square (1 + 8 * n)

let a = read_names "words.txt"
printfn "%d" (List.length (List.filter is_triangle
                                 (List.map to_number a)))