cat

  • EntryPointというattributeをつけるとコマンドライン引数を受け取る関数として扱われる
  • openでmodule(namespace)のopen
  • (System.IO.File.Readlinesは環境が古くて無かったっぽい)
  • オーバーロードされたメソッドを利用する時には型注釈必要。
open System

let lines (name:string) = 
    seq { use sr = new IO.StreamReader(name)
          while not sr.EndOfStream do
          yield sr.ReadLine()
    }   

let cat (name:string) =
    lines name
    |> Seq.iter (fun (x:string) -> Console.WriteLine x)

[<EntryPoint>]
let main (args:string[]) =
    args |> Seq.iter cat
    0
$ fsc.exe cat.fs
$ cat.exe cat.fs