diff --git a/Text/Parcom/Combinators.hs b/Text/Parcom/Combinators.hs
--- a/Text/Parcom/Combinators.hs
+++ b/Text/Parcom/Combinators.hs
@@ -4,11 +4,14 @@
 , many, many1, manySepBy
 , times
 , skip
+, possibly
 )
 where
 
 import Text.Parcom.Core
 import Text.Parcom.Internal
+import Control.Monad (liftM)
+import Data.Maybe (fromMaybe)
 
 -- | Walk a list of options, return the first one that succeeds.
 choice :: (Monad m, Stream s t) => [ParcomT s t m a] -> ParcomT s t m a
@@ -76,3 +79,15 @@
 -- | Ignore the result of a parser.
 skip :: Monad m => ParcomT s t m a -> ParcomT s t m ()
 skip p = p >> return ()
+
+-- | Optional parsing to Maybe
+possibly :: Monad m => ParcomT s t m a -> ParcomT s t m (Maybe a)
+possibly p = Just `liftM` p <|> return Nothing
+
+-- | Optional parsing with default
+optional :: Monad m => a -> ParcomT s t m a -> ParcomT s t m a
+optional d p = fromMaybe d `liftM` possibly p
+
+-- | Optional parsing, ignoring (but consuming) result
+option :: Monad m => ParcomT s t m a -> ParcomT s t m ()
+option p = skip $ optional undefined p
diff --git a/parcom-lib.cabal b/parcom-lib.cabal
--- a/parcom-lib.cabal
+++ b/parcom-lib.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                parcom-lib
-version:             0.3.0.1
+version:             0.4.0.0
 synopsis:            A simple parser-combinator library, a bit like Parsec but without the frills
 description:         Parcom provides parser combinator functionality in a string-type-agnostic way;
                      it supports strict ByteStrings (with Word8 tokens) and any list type (with
