syd_sydの日記

2006-06-13

[] bracket

Control.Exception.bracket

bracket 
  :: IO a -- 最初に行う (e.g.リソースを取得して返す) アクション
  -> (a -> IO b) -- 最後に行う (リソースの開放を行う) アクション
  -> (a -> IO c) -- 間に行う (メインの)  アクション
  -> IO c 

メインアクションの中で例外がraiseされた場合に、必ずリソースを開放してから例外がre-raiseされます。

高レベル言語には必ず存在する try-finally はこれでやりましょう。

特にリソースを意識しない場合、文字通りfinallyなんかもあります。

本文にはopenFileと組み合わせる例が載っています。この例では必ずファイルが閉じられます。