diff --git a/Network/Pcap/Enumerator.hs b/Network/Pcap/Enumerator.hs
--- a/Network/Pcap/Enumerator.hs
+++ b/Network/Pcap/Enumerator.hs
@@ -3,28 +3,28 @@
        , enumLive
        ) where
 
+import Control.Monad.State
 import Data.ByteString (ByteString)
 import Data.ByteString.Char8 ()
 import Data.Enumerator hiding (map, filter)
 import Data.Int (Int64)
 import Network.Pcap
 
-enumOffline :: FilePath -> Enumerator (PktHdr, ByteString) IO b
+enumOffline :: (MonadIO m) => FilePath -> Enumerator (PktHdr, ByteString) m b
 enumOffline path step = do
   h <- tryIO $ openOffline path
   let iter = enumPcap1 h step
   Iteratee $ runIteratee iter
 
-enumLive :: String -> Int -> Bool -> Int64 -> Enumerator (PktHdr, ByteString) IO b
+enumLive :: (MonadIO m) => String -> Int -> Bool -> Int64 -> Enumerator (PktHdr, ByteString) m b
 enumLive name snaplen promisc timeout step = do
   h <- tryIO $ openLive name snaplen promisc timeout
   let iter = enumPcap1 h step
   Iteratee $ runIteratee iter
 
-enumPcap1 :: PcapHandle -> Enumerator (PktHdr, ByteString) IO b
+enumPcap1 :: (MonadIO m) => PcapHandle -> Enumerator (PktHdr, ByteString) m b
 enumPcap1 h = checkContinue0 $ \lp k -> do
   pkt@(hdr, _) <- tryIO $ nextBS h
   if (hdrCaptureLength hdr == 0)
     then continue k
     else k (Chunks [pkt]) >>== lp
-
diff --git a/pcap-enumerator.cabal b/pcap-enumerator.cabal
--- a/pcap-enumerator.cabal
+++ b/pcap-enumerator.cabal
@@ -1,5 +1,5 @@
 Name:                pcap-enumerator
-Version:             0.1
+Version:             0.2
 Synopsis:            Convert a pcap into an enumerator.
 Description:         pcap enumerator package
 Homepage:            http://github.com/cutsea110/pcap-enumerator
@@ -15,6 +15,7 @@
   Exposed-modules:     Network.Pcap.Enumerator
   Build-depends:       
                        base >= 4.0 && < 5.0
+                     , mtl >= 2.0 && < 2.1
                      , pcap >= 0.4 && < 0.5
                      , enumerator >= 0.4.10 && < 0.5
                      , bytestring >= 0.9 && < 0.10
