ふと Haskell で RAII が行いたくなったので,モナドで実装してみました: module RAII ( RAII(), unsafeExtractRAII, unextractRAII, runRAII, scoped, unsafeReleaseRAII', unsafeReleaseRAII, wrapRAII, liftIO, onDisposed, disposedWith, disposedWith_, ) where import Control.Applicative import Control.Monad.IO.Class import Control.Exception.Base -- Haskell 上で RAII (Resource Acquisition Is Initialization) を実現する為のモナド newtype RAII a = RAI