air-2011.10.19: src/Air/Data/Managed.hs
module Air.Data.Managed where
import Air.Data.Default
class Managed a where
initialize :: IO (Maybe a)
initialize = return Nothing
destroy :: a -> IO ()
destroy = const (return ())
with_managed_object :: (a -> IO ()) -> IO ()
with_managed_object f = do
maybe_x <- initialize
case maybe_x of
Just x -> f x >> destroy x
Nothing -> return ()