diff --git a/Control/Monad/Trans/Resource.hs b/Control/Monad/Trans/Resource.hs
--- a/Control/Monad/Trans/Resource.hs
+++ b/Control/Monad/Trans/Resource.hs
@@ -32,6 +32,7 @@
     , joinResourceT
       -- * Registering/releasing
     , allocate
+    , allocate_
     , register
     , release
     , unprotect
@@ -105,6 +106,22 @@
          -> (a -> IO ()) -- ^ free resource
          -> m (ReleaseKey, a)
 allocate a = liftResourceT . allocateRIO a
+
+-- | Perform some allocation where the return value is not required, and
+-- automatically register a cleanup action.
+--
+-- @allocate_@ is to @allocate@ as @bracket_@ is to @bracket@
+--
+-- This is almost identical to calling the allocation and then
+-- @register@ing the release action, but this properly handles masking of
+-- asynchronous exceptions.
+--
+-- @since 1.2.4
+allocate_ :: MonadResource m
+          => IO a -- ^ allocate
+          -> IO () -- ^ free resource
+          -> m ReleaseKey
+allocate_ a = fmap fst . allocate a . const
 
 -- | Perform asynchronous exception masking.
 --
diff --git a/resourcet.cabal b/resourcet.cabal
--- a/resourcet.cabal
+++ b/resourcet.cabal
@@ -1,5 +1,5 @@
 Name:                resourcet
-Version:             1.2.3
+Version:             1.2.4
 Synopsis:            Deterministic allocation and freeing of scarce resources.
 description:         Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/resourcet>.
 License:             BSD3
