bracketによるリソース管理
bracketで書ける時はそれを使う
bracketを使うと、
例外が発生した場合でもリソースの解放を確実に行えます。
bracketでリソースの解放処理が書ける時はそちらを使ってください。
わざわざバラバラのdoブロックで書かないでください。
出来る限りwithパターンの関数を使う
ライブラリにはbracket関数の特化型である関数がしばしば存在します。
例えば、
withAsync :: MonadUnliftIO m => m a -> (Async a -> m b) -> m b
などの関数です。
存在するならばそれを優先します。