diff --git a/Data/Picoparsec.hs b/Data/Picoparsec.hs
--- a/Data/Picoparsec.hs
+++ b/Data/Picoparsec.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE Haskell2010 #-}
 -- |
 -- Module      :  Data.Picoparsec
--- Copyright   :  Bryan O'Sullivan 2007-2011, Mario Blažević 2014
+-- Copyright   :  Bryan O'Sullivan 2007-2011, Mario Blažević 2014-2015
 -- License     :  BSD3
 --
 -- Maintainer  :  Mario Blažević
@@ -59,6 +59,7 @@
     , I.peekChar
     , I.peekChar'
     , I.satisfyChar
+    , I.satisfyCharInput
 
     -- * Efficient string handling
     , I.scan
@@ -108,13 +109,15 @@
     , I.atEnd
     ) where
 
-import Data.Monoid (Monoid)
+import Data.Monoid -- (Monoid)
 
 import Data.Picoparsec.Combinator
 import qualified Data.Picoparsec.Monoid.Internal as I
 import qualified Data.Picoparsec.Internal as I
 import Data.Picoparsec.Monoid.Internal (Result, parse)
 import qualified Data.Picoparsec.Internal.Types as T
+
+import Prelude
 
 -- $parsec
 --
diff --git a/Data/Picoparsec/Combinator.hs b/Data/Picoparsec/Combinator.hs
--- a/Data/Picoparsec/Combinator.hs
+++ b/Data/Picoparsec/Combinator.hs
@@ -36,17 +36,16 @@
     , notFollowedBy
     ) where
 
-import Prelude hiding (succ)
-
-import Control.Applicative (Alternative(..), Applicative(..), empty, liftA2,
-                            many, (<|>), (*>), (<$>))
+import Control.Applicative -- (Alternative(..), Applicative(..), empty, liftA2, many, (<|>), (*>), (<$>))
 import Control.Monad (MonadPlus(..))
-import Data.Monoid (Monoid(mappend))
+import Data.Monoid -- (Monoid(mappend))
 import Data.Picoparsec.Internal.Types (Parser(..), IResult(..))
 import Data.Picoparsec.Internal (atEnd, endOfInput, lookAhead, notFollowedBy)
 import Data.ByteString (ByteString)
 import Data.Text (Text)
 import qualified Data.Picoparsec.Zepto as Z
+
+import Prelude hiding (succ)
 
 -- | Attempt a parse, and if it fails, rewind the input so that no
 -- input appears to have been consumed.
diff --git a/Data/Picoparsec/Internal.hs b/Data/Picoparsec/Internal.hs
--- a/Data/Picoparsec/Internal.hs
+++ b/Data/Picoparsec/Internal.hs
@@ -25,12 +25,12 @@
     , notFollowedBy
     ) where
 
-import Prelude hiding (null)
-
-import Control.Applicative ((<$>))
+import Data.Functor -- (<$>)
 import Data.Picoparsec.Internal.Types
-import Data.Monoid (Monoid, mempty, (<>))
+import Data.Monoid -- (Monoid, mempty, (<>))
 import Data.Monoid.Null (MonoidNull(null))
+
+import Prelude hiding (null)
 
 -- | Compare two 'IResult' values for equality.
 --
diff --git a/Data/Picoparsec/Internal/Types.hs b/Data/Picoparsec/Internal/Types.hs
--- a/Data/Picoparsec/Internal/Types.hs
+++ b/Data/Picoparsec/Internal/Types.hs
@@ -23,10 +23,12 @@
     , addS
     ) where
 
-import Control.Applicative (Alternative(..), Applicative(..), (<$>))
+import Control.Applicative -- (Alternative(..), Applicative(..), (<$>))
 import Control.DeepSeq (NFData(rnf))
 import Control.Monad (MonadPlus(..))
-import Data.Monoid (Monoid(..), (<>))
+import Data.Monoid -- (Monoid(..), (<>))
+
+import Prelude
 
 -- | The result of a parse.  This is parameterised over the type @t@
 -- of string that was processed.
diff --git a/Data/Picoparsec/Monoid/Internal.hs b/Data/Picoparsec/Monoid/Internal.hs
--- a/Data/Picoparsec/Monoid/Internal.hs
+++ b/Data/Picoparsec/Monoid/Internal.hs
@@ -40,6 +40,7 @@
     , char
     , notChar
     , satisfyChar
+    , satisfyCharInput
     , peekChar
     , peekChar'
 
@@ -71,14 +72,12 @@
     , ensureOne
     ) where
 
-import Prelude hiding (getChar, null, span, take, takeWhile)
-
-import Control.Applicative ((<|>), (<$>))
+import Control.Applicative -- ((<|>), (<$>))
 import Control.Monad (when)
 import Data.Picoparsec.Combinator
 import Data.Picoparsec.Internal.Types
 import Data.Picoparsec.Internal (demandInput, get, prompt, put, wantInput)
-import Data.Monoid (Monoid(..), (<>))
+import Data.Monoid -- (Monoid(..), (<>))
 import Data.Monoid.Cancellative (LeftGCDMonoid(..))
 import Data.Monoid.Null (MonoidNull(null))
 import qualified Data.Monoid.Factorial as Factorial
@@ -88,6 +87,8 @@
 import Data.String (IsString(..))
 import qualified Data.Picoparsec.Internal.Types as T
 
+import Prelude hiding (getChar, null, span, take, takeWhile)
+
 type Result = IResult
 
 instance (IsString a, LeftGCDMonoid a, MonoidNull a, a ~ b) => IsString (Parser a b) where
@@ -125,12 +126,11 @@
   if p first then put rest >> return first else fail "satisfy"
 {-# INLINE satisfy #-}
 
--- | The parser @satisfy p@ succeeds for any input character for
--- which the predicate @p@ returns 'True'. Returns the character that 
--- is actually parsed.
+-- | The parser @satisfyChar p@ succeeds for any input character for which the predicate @p@ returns 'True'. Returns the
+-- character that is actually parsed.
 --
--- >digit = satisfy isDigit
--- >    where isDigit w = w >= "0" && w <= "9"
+-- >digit = satisfyChar isDigit
+-- >    where isDigit w = w >= '0' && w <= '9'
 satisfyChar :: TextualMonoid t => (Char -> Bool) -> Parser t Char
 satisfyChar p = do
   s <- ensureOne
@@ -138,6 +138,18 @@
      of Just (first, rest) | p first -> put rest >> return first 
         _ -> fail "satisfy"
 {-# INLINE satisfyChar #-}
+
+-- | The parser @satisfyCharInput p@ succeeds for any input character for which the predicate @p@ returns
+-- 'True'. Returns the parsed input token representing the character. @satisfyCharInput p@ is a faster version of
+-- @singleton <$> satisfyChar p@ and of @satisfy (fromMaybe False p . characterPrefix)@.
+satisfyCharInput :: TextualMonoid t => (Char -> Bool) -> Parser t t
+satisfyCharInput p = do
+  s <- ensureOne
+  let Just (first, rest) = Factorial.splitPrimePrefix s
+  case Textual.characterPrefix first
+     of Just c | p c -> put rest >> return first
+        _ -> fail "satisfy"
+{-# INLINE satisfyCharInput #-}
 
 -- | The parser @skip p@ succeeds for any prime input token for which
 -- the predicate @p@ returns 'True'.
diff --git a/Data/Picoparsec/Number.hs b/Data/Picoparsec/Number.hs
--- a/Data/Picoparsec/Number.hs
+++ b/Data/Picoparsec/Number.hs
@@ -28,9 +28,7 @@
     , scientific
     ) where
 
-import Prelude hiding (length)
-
-import Control.Applicative (pure, (*>), (<$>), (<|>))
+import Control.Applicative -- (pure, (*>), (<$>), (<|>))
 import Control.DeepSeq (NFData(rnf))
 import Control.Monad (void, when)
 import Data.Monoid.Factorial (length)
@@ -46,6 +44,8 @@
 
 import Data.Picoparsec (Parser, string)
 import qualified Data.Picoparsec.Monoid.Internal as I
+
+import Prelude hiding (length)
 
 -- | A numeric type that can represent integers accurately, and
 -- floating point numbers to the precision of a 'Double'.
diff --git a/Data/Picoparsec/State.hs b/Data/Picoparsec/State.hs
--- a/Data/Picoparsec/State.hs
+++ b/Data/Picoparsec/State.hs
@@ -18,11 +18,13 @@
 
 module Data.Picoparsec.State (getState, putState, modifyState) where
 
-import Data.Functor ((<$>))
+import Data.Functor -- ((<$>))
 import Data.Monoid.Instances.Stateful (Stateful)
 import qualified Data.Monoid.Instances.Stateful as Stateful
 import Data.Picoparsec (Parser)
 import qualified Data.Picoparsec.Internal as I
+
+import Prelude
 
 -- | Returns the current user state.
 getState :: Parser (Stateful s t) s
diff --git a/picoparsec.cabal b/picoparsec.cabal
--- a/picoparsec.cabal
+++ b/picoparsec.cabal
@@ -1,5 +1,5 @@
 name:            picoparsec
-version:         0.1.2.1
+version:         0.1.2.2
 license:         BSD3
 license-file:    LICENSE
 category:        Text, Parsing
@@ -60,7 +60,6 @@
 
   if flag(developer)
     ghc-prof-options: -auto-all
-    ghc-options: -Werror
 
 test-suite tests
   type:           exitcode-stdio-1.0
@@ -75,9 +74,6 @@
   ghc-options:
     -Wall -threaded -rtsopts
 
-  if flag(developer)
-    ghc-options: -Werror
-
   build-depends:
     picoparsec,
     array,
@@ -109,9 +105,6 @@
     Numbers
     Warp
   ghc-options: -O2 -Wall
-
-  if flag(developer)
-    ghc-options: -Werror
 
   build-depends:
     array,
