diff --git a/parsers.cabal b/parsers.cabal
--- a/parsers.cabal
+++ b/parsers.cabal
@@ -1,6 +1,6 @@
 name:          parsers
 category:      Text, Parsing
-version:       0.10
+version:       0.10.1
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
diff --git a/src/Text/Parser/Char.hs b/src/Text/Parser/Char.hs
--- a/src/Text/Parser/Char.hs
+++ b/src/Text/Parser/Char.hs
@@ -25,21 +25,22 @@
 module Text.Parser.Char
   (
   -- * Combinators
-    oneOf       -- :: CharParsing m => [Char] -> m Char
-  , noneOf      -- :: CharParsing m => [Char] -> m Char
-  , oneOfSet    -- :: CharParsing m => CharSet -> m Char
-  , noneOfSet   -- :: CharParsing m => CharSet -> m Char
-  , spaces      -- :: CharParsing m => m ()
-  , space       -- :: CharParsing m => m Char
-  , newline     -- :: CharParsing m => m Char
-  , tab         -- :: CharParsing m => m Char
-  , upper       -- :: CharParsing m => m Char
-  , lower       -- :: CharParsing m => m Char
-  , alphaNum    -- :: CharParsing m => m Char
-  , letter      -- :: CharParsing m => m Char
-  , digit       -- :: CharParsing m => m Char
-  , hexDigit    -- :: CharParsing m => m Char
-  , octDigit    -- :: CharParsing m => m Char
+    oneOf        -- :: CharParsing m => [Char] -> m Char
+  , noneOf       -- :: CharParsing m => [Char] -> m Char
+  , oneOfSet     -- :: CharParsing m => CharSet -> m Char
+  , noneOfSet    -- :: CharParsing m => CharSet -> m Char
+  , spaces       -- :: CharParsing m => m ()
+  , space        -- :: CharParsing m => m Char
+  , newline      -- :: CharParsing m => m Char
+  , tab          -- :: CharParsing m => m Char
+  , upper        -- :: CharParsing m => m Char
+  , lower        -- :: CharParsing m => m Char
+  , alphaNum     -- :: CharParsing m => m Char
+  , letter       -- :: CharParsing m => m Char
+  , digit        -- :: CharParsing m => m Char
+  , hexDigit     -- :: CharParsing m => m Char
+  , octDigit     -- :: CharParsing m => m Char
+  , satisfyRange -- :: CharParsing m => Char -> Char -> m Char
   -- * Class
   , CharParsing(..)
   ) where
@@ -166,6 +167,10 @@
 octDigit :: CharParsing m => m Char
 octDigit = satisfy isOctDigit <?> "octal digit"
 {-# INLINE octDigit #-}
+
+satisfyRange :: CharParsing m => Char -> Char -> m Char
+satisfyRange a z = satisfy (\c -> c >= a && c <= z)
+{-# INLINE satisfyRange #-}
 
 -- | Additional functionality needed to parse character streams.
 class Parsing m => CharParsing m where
diff --git a/src/Text/Parser/Combinators.hs b/src/Text/Parser/Combinators.hs
--- a/src/Text/Parser/Combinators.hs
+++ b/src/Text/Parser/Combinators.hs
@@ -57,7 +57,7 @@
   ) where
 
 import Control.Applicative
-import Control.Monad (MonadPlus(..), ap)
+import Control.Monad (MonadPlus(..))
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.State.Lazy as Lazy
 import Control.Monad.Trans.State.Strict as Strict
diff --git a/src/Text/Parser/Expression.hs b/src/Text/Parser/Expression.hs
--- a/src/Text/Parser/Expression.hs
+++ b/src/Text/Parser/Expression.hs
@@ -106,7 +106,7 @@
               prefixOp   = choice prefix  <?> ""
               postfixOp  = choice postfix <?> ""
 
-              ambiguous assoc op= op *> empty <?> ("ambiguous use of a " ++ assoc ++ "-associative operator")
+              ambiguous assoc op = try $ op *> empty <?> ("ambiguous use of a " ++ assoc ++ "-associative operator")
 
               ambiguousRight    = ambiguous "right" rassocOp
               ambiguousLeft     = ambiguous "left" lassocOp
diff --git a/src/Text/Parser/Token.hs b/src/Text/Parser/Token.hs
--- a/src/Text/Parser/Token.hs
+++ b/src/Text/Parser/Token.hs
@@ -549,7 +549,7 @@
 escapeCode :: TokenParsing m => m Char
 escapeCode = (charEsc <|> charNum <|> charAscii <|> charControl) <?> "escape code"
   where
-  charControl = (\c -> toEnum (fromEnum c - fromEnum 'A')) <$> (char '^' *> upper)
+  charControl = (\c -> toEnum (fromEnum c - fromEnum '@')) <$> (char '^' *> (upper <|> char '@'))
   charNum     = toEnum . fromInteger <$> num where
     num = decimal
       <|> (char 'o' *> number 8 octDigit)
