Chris Smith のProgramming F# 3.0の例を使用します。
let invalidUseOfMutable() =
let mutable x = 0
let incrementX() = x <- x + 1
incrementX()
x;;
これは期待どおりに失敗します:
エラー FS0407: 可変変数 'x' が無効な方法で使用されています。ミュータブル変数は、クロージャによってキャプチャできません。
関数の本体を FSharp Interactive にカット アンド ペーストします。
let mutable x = 0
let incrementX() = x <- x + 1
incrementX()
x;;
そしてそれはうまくいきます!
値: int = 1
なんで?