diff --git a/Data/Attoparsec/Enumerator.hs b/Data/Attoparsec/Enumerator.hs
--- a/Data/Attoparsec/Enumerator.hs
+++ b/Data/Attoparsec/Enumerator.hs
@@ -8,10 +8,13 @@
 -- Portability: portable
 --
 -----------------------------------------------------------------------------
+{-# LANGUAGE DeriveDataTypeable #-}
 module Data.Attoparsec.Enumerator
 	( ParseError (..)
 	, iterParser
 	) where
+import Control.Exception (Exception)
+import Data.Typeable (Typeable)
 import qualified Data.Attoparsec as A
 import qualified Data.ByteString as B
 import qualified Data.Enumerator as E
@@ -21,11 +24,15 @@
 	{ errorContexts :: [String]
 	, errorMessage :: String
 	}
-	deriving (Show)
+	deriving (Show, Typeable)
 
+instance Exception ParseError
+
 -- | Convert an Attoparsec 'A.Parser' into an 'E.Iteratee'. The parser will
 -- be streamed bytes until it returns 'A.Done' or 'A.Fail'.
-iterParser :: Monad m => A.Parser a -> E.Iteratee ParseError B.ByteString m a
+--
+-- If parsing fails, the iteratee's error value will contain a 'ParseError'.
+iterParser :: Monad m => A.Parser a -> E.Iteratee B.ByteString m a
 iterParser p = E.continue (step (A.parse p)) where
 	step parse (E.Chunks xs) = parseLoop parse xs
 	step parse E.EOF = case parse B.empty of
diff --git a/attoparsec-enumerator.cabal b/attoparsec-enumerator.cabal
--- a/attoparsec-enumerator.cabal
+++ b/attoparsec-enumerator.cabal
@@ -1,5 +1,5 @@
 name: attoparsec-enumerator
-version: 0.1.0.3
+version: 0.2
 synopsis: Convert an Attoparsec parser into an iteratee
 license: MIT
 license-file: license.txt
@@ -20,7 +20,7 @@
       base >= 3 && < 5
     , attoparsec >= 0.8 && < 0.9
     , bytestring >= 0.9 && < 0.10
-    , enumerator >= 0.1 && < 0.4
+    , enumerator >= 0.4 && < 0.5
 
   exposed-modules:
     Data.Attoparsec.Enumerator
