diff --git a/Data/Attoparsec.hs b/Data/Attoparsec.hs
--- a/Data/Attoparsec.hs
+++ b/Data/Attoparsec.hs
@@ -46,6 +46,7 @@
     , I.notWord8
     , I.satisfy
     , I.satisfyWith
+    , I.skip
 
     -- ** Byte classes
     , I.inClass
diff --git a/Data/Attoparsec/Char8.hs b/Data/Attoparsec/Char8.hs
--- a/Data/Attoparsec/Char8.hs
+++ b/Data/Attoparsec/Char8.hs
@@ -48,6 +48,7 @@
     , isDigit_w8
     , isAlpha_iso8859_15
     , isAlpha_ascii
+    , isSpace
 
     -- *** Character classes
     , inClass
diff --git a/Data/Attoparsec/FastSet.hs b/Data/Attoparsec/FastSet.hs
--- a/Data/Attoparsec/FastSet.hs
+++ b/Data/Attoparsec/FastSet.hs
@@ -97,7 +97,7 @@
 
 mkTable :: B.ByteString -> B.ByteString
 mkTable s = I.unsafeCreate 32 $ \t -> do
-            I.memset t 0 32
+            _ <- I.memset t 0 32
             U.unsafeUseAsCStringLen s $ \(p, l) ->
               let loop n | n == l = return ()
                          | otherwise = do
diff --git a/Data/Attoparsec/Internal.hs b/Data/Attoparsec/Internal.hs
--- a/Data/Attoparsec/Internal.hs
+++ b/Data/Attoparsec/Internal.hs
@@ -30,6 +30,7 @@
     , satisfy
     , satisfyWith
     , anyWord8
+    , skip
     , word8
     , notWord8
 
@@ -244,6 +245,19 @@
   if p w
     then put (B.unsafeTail s) >> return w
     else fail "satisfy"
+
+-- | The parser @skip p@ succeeds for any byte for which the predicate
+-- @p@ returns 'True'.
+--
+-- >digit = satisfy isDigit
+-- >    where isDigit w = w >= 48 && w <= 57
+skip :: (Word8 -> Bool) -> Parser ()
+skip p = do
+  ensure 1
+  s <- get
+  if p (B.unsafeHead s)
+    then put (B.unsafeTail s)
+    else fail "skip"
 
 -- | The parser @satisfyWith f p@ transforms a byte, and succeeds if
 -- the predicate @p@ returns 'True' on the transformed value. The
diff --git a/Data/Attoparsec/Lazy.hs b/Data/Attoparsec/Lazy.hs
--- a/Data/Attoparsec/Lazy.hs
+++ b/Data/Attoparsec/Lazy.hs
@@ -34,7 +34,6 @@
     ) where
 
 import Data.ByteString.Lazy.Internal (ByteString(..), chunk)
-import qualified Data.ByteString.Lazy as L
 import qualified Data.ByteString as B
 import qualified Data.Attoparsec as A
 import Data.Attoparsec hiding (Result(..), eitherResult, maybeResult,
diff --git a/attoparsec.cabal b/attoparsec.cabal
--- a/attoparsec.cabal
+++ b/attoparsec.cabal
@@ -1,5 +1,5 @@
 name:            attoparsec
-version:         0.8.0.2
+version:         0.8.1.0
 license:         BSD3
 license-file:    LICENSE
 category:        Text, Parsing
@@ -40,7 +40,7 @@
     build-depends: base < 2.0 || >= 3, bytestring >= 0.9, containers >= 0.1.0.1
 
   if flag(applicative-in-base)
-    build-depends: base >= 2.0
+    build-depends: base >= 2.0 && < 5.0
     cpp-options: -DAPPLICATIVE_IN_BASE
   else
     build-depends: base < 2.0
