F#から.NETライブラリの呼び出し(F#)

F#は.NETの上で動作する。だから.NETの強力なライブラリにアクセスが出来る。

static 関数を呼び出す

#light
open System
Console.WriteLine( "Hello {0} libraries.", ".NET" )

FileInfo クラスを使う

#light
open System.IO
let file = new FileInfo( "test.txt" )
if not file.Exists then
  using
    (file.CreateText())
    (fun stream -> stream.WriteLine("hello world"))

printfn "file: %s" file.FullName

ちなみに using は F# ライブラリ FSLib.dll に定義されている関数。C# の using 構文と同様の効果を実現するものだ。

.NETのイベントハンドラを定義する

#light
open System.Timers

let timer =
  let t = new Timer()
  t.Interval <- 1000.0
  t.Enabled  <- true
  t.Elapsed.Add( fun _ -> printfn "elapsed" )
  t

read_line () |> ignore

Add()関数でイベントハンドラを追加する。ちなみに Timer.Elapsed のイベントハンドラ

public delegate void ElapsedEventHandler( object sender, ElapsedEventArgs e );

と定義されているわけで、普通に考えるとイベントハンドラは引数を2つとるはず。だけどF#でハンドラを定義するときは引数は1つだけでいいらしい。sender は不要で e だけを引数として受け取ればOK。上記のサンプルではアンダースコア _ で受けて引数を無視している。