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.7.1
+version:       0.8
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
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
@@ -23,10 +23,8 @@
   -- * Token Parsing
     whiteSpace      -- :: TokenParsing m => m ()
   , charLiteral     -- :: TokenParsing m => m Char
-  , stringLiteral   -- :: TokenParsing m => m String
-  , stringLiteral'  -- :: TokenParsing m => m String
-  , textLiteral     -- :: TokenParsing m => m Text
-  , textLiteral'    -- :: TokenParsing m => m Text
+  , stringLiteral   -- :: (TokenParsing m, IsString s) => m s
+  , stringLiteral'  -- :: (TokenParsing m, IsString s) => m s
   , natural         -- :: TokenParsing m => m Integer
   , integer         -- :: TokenParsing m => m Integer
   , double          -- :: TokenParsing m => m Double
@@ -60,11 +58,9 @@
   , integer'      -- :: TokenParsing m => m Integer
   -- * Identifiers
   , IdentifierStyle(..)
-  , liftIdentifierStyle -- :: (MonadTrans t, Monad m) =>
-                        --    IdentifierStyle m -> IdentifierStyle (t m)
-  , ident           -- :: TokenParsing m => IdentifierStyle m -> m String
+  , liftIdentifierStyle -- :: (MonadTrans t, Monad m) => IdentifierStyle m -> IdentifierStyle (t m)
+  , ident           -- :: (TokenParsing m, IsString s) => IdentifierStyle m -> m s
   , reserve         -- :: TokenParsing m => IdentifierStyle m -> String -> m ()
-  , identText       -- :: TokenParsing m => IdentifierStyle m -> m Text
   , reserveText     -- :: TokenParsing m => IdentifierStyle m -> Text -> m ()
   -- ** Lenses and Traversals
   , styleName
@@ -94,6 +90,7 @@
 import Data.HashSet (HashSet)
 import Data.List (foldl')
 import Data.Monoid
+import Data.String
 import Data.Text hiding (empty,zip,foldl,foldl')
 import Text.Parser.Char
 import Text.Parser.Combinators
@@ -121,8 +118,8 @@
 -- gaps. The literal string is parsed according to the grammar rules
 -- defined in the Haskell report (which matches most programming
 -- languages quite closely).
-stringLiteral :: TokenParsing m => m String
-stringLiteral = token (highlight StringLiteral lit) where
+stringLiteral :: (TokenParsing m, IsString s) => m s
+stringLiteral = fromString <$> token (highlight StringLiteral lit) where
   lit = Prelude.foldr (maybe id (:)) ""
     <$> between (char '"') (char '"' <?> "end of string") (many stringChar)
     <?> "string"
@@ -139,15 +136,10 @@
   escapeGap = skipSome space *> (char '\\' <?> "end of string gap")
 {-# INLINE stringLiteral #-}
 
--- | A version of 'stringLiteral' that returns 'Text' instead.
-textLiteral :: TokenParsing m => m Text
-textLiteral = pack <$> stringLiteral
-{-# INLINE textLiteral #-}
-
 -- | This token parser behaves as 'stringLiteral', but for single-quoted
 -- strings.
-stringLiteral' :: TokenParsing m => m String
-stringLiteral' = token (highlight StringLiteral lit) where
+stringLiteral' :: (TokenParsing m, IsString s) => m s
+stringLiteral' = fromString <$> token (highlight StringLiteral lit) where
   lit = Prelude.foldr (maybe id (:)) ""
     <$> between (char '\'') (char '\'' <?> "end of string") (many stringChar)
     <?> "string"
@@ -164,11 +156,6 @@
   escapeGap = skipSome space *> (char '\\' <?> "end of string gap")
 {-# INLINE stringLiteral' #-}
 
--- | A version of 'stringLiteral'' that returns 'Text' instead.
-textLiteral' :: TokenParsing m => m Text
-textLiteral' = pack <$> stringLiteral'
-{-# INLINE textLiteral' #-}
-
 -- | This token parser parses a natural number (a positive whole
 -- number). Returns the value of the number. The number can be
 -- specified in 'decimal', 'hexadecimal' or
@@ -518,18 +505,13 @@
 {-# INLINE reserveText #-}
 
 -- | Parse a non-reserved identifier or symbol
-ident :: (TokenParsing m, Monad m) => IdentifierStyle m -> m String
-ident s = token $ try $ do
+ident :: (TokenParsing m, Monad m, IsString s) => IdentifierStyle m -> m s
+ident s = fmap fromString $ token $ try $ do
   name <- highlight (_styleHighlight s)
           ((:) <$> _styleStart s <*> many (_styleLetter s) <?> _styleName s)
   when (HashSet.member name (_styleReserved s)) $ unexpected $ "reserved " ++ _styleName s ++ " " ++ show name
   return name
 {-# INLINE ident #-}
-
--- | Parse a non-reserved identifier or symbol (as 'Text').
-identText :: (TokenParsing m, Monad m) => IdentifierStyle m -> m Text
-identText s = pack <$> ident s
-{-# INLINE identText #-}
 
 -- * Utilities
 
