diff --git a/Data/Serialize/Get/Enumerator.hs b/Data/Serialize/Get/Enumerator.hs
new file mode 100644
--- /dev/null
+++ b/Data/Serialize/Get/Enumerator.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+module Data.Serialize.Get.Enumerator
+    ( ParseError(..)
+    , iterGet
+    ) where
+
+import Control.Exception
+import Data.Monoid
+import Data.Typeable
+
+import Data.Serialize.Get
+import Data.Enumerator
+import Data.ByteString
+
+data ParseError = ParseError String
+                | EOFError
+                deriving (Show, Typeable)
+
+instance Exception ParseError
+
+
+-- | Convert a 'Get' to an 'Iteratee'. A 'ParseError' is emitted on failure.
+iterGet :: Monad m => Get a -> Iteratee ByteString m a
+iterGet = continue . step . runGetPartial
+  where
+    step p (Chunks xs) = loop p xs
+    step p EOF = case p mempty of
+        Done r _  -> yield r EOF
+        Partial{} -> throwError EOFError
+        Fail s    -> throwError (ParseError s)
+
+    loop p [] = continue (step p)
+    loop p (x:xs) = case p x of
+        Done r bs -> yield r $ Chunks (bs:xs)
+        Partial c -> loop c xs
+        Fail s    -> throwError (ParseError s)
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/cereal-enumerator.cabal b/cereal-enumerator.cabal
new file mode 100644
--- /dev/null
+++ b/cereal-enumerator.cabal
@@ -0,0 +1,17 @@
+name:                cereal-enumerator
+version:             0.1
+synopsis:            Deserialize things with cereal and enumerator
+license:             PublicDomain
+author:              Patrick Palka
+maintainer:          patrick@parcs.ath.cx
+category:            Text
+build-type:          Simple
+cabal-version:       >=1.8
+
+library
+  exposed-modules:     Data.Serialize.Get.Enumerator
+  build-depends:       base < 5
+                     , enumerator
+                     , cereal
+                     , bytestring
+
