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.3
+version:       0.11
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
@@ -51,6 +51,7 @@
     charset              >= 0.3     && < 1,
     containers           >= 0.4     && < 0.6,
     parsec               >= 3.1     && < 3.2,
+    attoparsec           >= 0.11.2  && < 0.12,
     text                 >= 0.10    && < 1.2,
     transformers         >= 0.2     && < 0.4,
     unordered-containers >= 0.2     && < 0.3
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
@@ -1,5 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 {-# OPTIONS_GHC -fspec-constr -fspec-constr-count=8 #-}
 
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 704
@@ -65,6 +66,8 @@
 import Data.Text
 import qualified Text.ParserCombinators.ReadP as ReadP
 import qualified Text.Parsec as Parsec
+import qualified Data.Attoparsec.Types as Att
+import qualified Data.Attoparsec.Combinator as Att
 import Text.Parser.Combinators
 
 -- | @oneOf cs@ succeeds if the current character is in the supplied
@@ -338,6 +341,11 @@
   notChar c = Parsec.satisfy (/= c)
   anyChar   = Parsec.anyChar
   string    = Parsec.string
+
+instance Att.Chunk t => CharParsing (Att.Parser t) where
+  satisfy p = fmap e2c $ Att.satisfyElem $ p . e2c
+    where e2c = Att.chunkElemToChar (undefined :: t)
+  {-# INLINE satisfy #-}
 
 instance CharParsing ReadP.ReadP where
   satisfy   = ReadP.satisfy
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
@@ -75,6 +75,8 @@
 import Data.Monoid
 import Data.Traversable (sequenceA)
 import qualified Text.Parsec as Parsec
+import qualified Data.Attoparsec.Types as Att
+import qualified Data.Attoparsec.Combinator as Att
 import qualified Text.ParserCombinators.ReadP as ReadP
 
 -- | @choice ps@ tries to apply the parsers in the list @ps@ in order,
@@ -370,6 +372,14 @@
   unexpected    = Parsec.unexpected
   eof           = Parsec.eof
   notFollowedBy = Parsec.notFollowedBy
+
+instance Att.Chunk t => Parsing (Att.Parser t) where
+  try             = Att.try
+  (<?>)           = (Att.<?>)
+  skipMany        = Att.skipMany
+  skipSome        = Att.skipMany1
+  unexpected      = fail
+  eof             = Att.endOfInput
 
 instance Parsing ReadP.ReadP where
   try        = id
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
@@ -1,4 +1,5 @@
 {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# OPTIONS_GHC -fspec-constr -fspec-constr-count=8 #-}
 {-# LANGUAGE CPP #-}
@@ -99,6 +100,7 @@
 import Data.Text hiding (empty,zip,foldl,foldl')
 import qualified Text.ParserCombinators.ReadP as ReadP
 import qualified Text.Parsec as Parsec
+import qualified Data.Attoparsec.Types as Att
 import Text.Parser.Char
 import Text.Parser.Combinators
 import Text.Parser.Token.Highlight
@@ -755,5 +757,7 @@
   {-# INLINE highlight #-}
 
 instance Parsec.Stream s m Char => TokenParsing (Parsec.ParsecT s u m)
+
+instance Att.Chunk t => TokenParsing (Att.Parser t)
 
 instance TokenParsing ReadP.ReadP
