diff --git a/Control/Monad/Extra.hs b/Control/Monad/Extra.hs
--- a/Control/Monad/Extra.hs
+++ b/Control/Monad/Extra.hs
@@ -1,6 +1,7 @@
 module Control.Monad.Extra where
 
 import Control.Applicative
+import Control.Monad
 import Control.Monad.Trans.Cont
 import Control.Monad.IO.Class
 
@@ -8,6 +9,10 @@
 skip :: Monad m => m ()
 skip = return ()
 
+-- | Discards a value
+discard :: Monad m => a -> m ()
+discard _ = return ()
+
 -- | Synonym for @pure ()@.
 obvious :: Applicative f => f ()
 obvious = pure ()
@@ -47,6 +52,16 @@
 doCallCC :: Monad m => ((r -> ContT r m b) -> ContT r m r) -> m r
 doCallCC = flip runContT return . callCC
 
+-- | Return a continuation that one can jump back to within 'ContT'.
+--
+-- >>> flip runContT return $ do { k <- label; ...; k }
+label :: ContT r m (ContT r m a)
+label = callCC $ \k -> let m = k m in return m
+
 -- | Short-hand for @liftIO@.
 io :: MonadIO m => IO a -> m a
 io = liftIO
+
+-- | Lift a 'Maybe' value into the 'MaybeT' monad transformer.
+liftMaybe :: (MonadPlus m) => Maybe a -> m a
+liftMaybe = maybe mzero return
diff --git a/monad-extras.cabal b/monad-extras.cabal
--- a/monad-extras.cabal
+++ b/monad-extras.cabal
@@ -1,5 +1,5 @@
 name:           monad-extras
-version:        0.2.0.0
+version:        0.3.0.0
 synopsis:       Extra utility functions for working with monads
 -- description:
 homepage:       http://github.com/jwiegley/monad-extras
