content: {-# LANGUAGE RankNTypes #-}
  
  {-| This module is a safer subset of "Control.Monad.Managed" that only lets you
      unwrap the `Managed` type using `runManaged`.  This enforces that you never
      leak acquired resources from a `Managed` computation.
  
      In general, you should strive to propagate the `Managed` type as much as
      possible and use `runManaged` when you are done with acquired resources.
      However, there are legitimate circumstances where you want to return a value
      other than acquired resource from the bracketed computation, which requires
      using `Control.Monad.Managed.with`.
  
      This module is not the default because you can also use the `Managed` type
      for callback-based code that is completely unrelated to resources.
  -}
  
  module Control.Monad.Managed.Safe (
      -- * Managed
      Managed,
      MonadManaged(..),
      managed,
      managed_,
      defer,
      runManaged,
  
      -- * Re-exports
      -- $reexports
      module Control.Monad.IO.Class
      ) where
  
  import Control.Monad.IO.Class (MonadIO(liftIO))
  import Control.Monad.Managed
      (Managed, MonadManaged(..), defer, managed, managed_, runManaged)
  
  {- $reexports
      "Control.Monad.IO.Class" re-exports 'MonadIO'
  -}
  