diff --git a/enumerator.cabal b/enumerator.cabal
--- a/enumerator.cabal
+++ b/enumerator.cabal
@@ -1,5 +1,5 @@
 name: enumerator
-version: 0.2.1
+version: 0.3
 synopsis: Implementation of Oleg Kiselyov's left-fold enumerators
 license: MIT
 license-file: license.txt
diff --git a/hs/Data/Enumerator/IO.hs b/hs/Data/Enumerator/IO.hs
--- a/hs/Data/Enumerator/IO.hs
+++ b/hs/Data/Enumerator/IO.hs
@@ -13,7 +13,6 @@
 module Data.Enumerator.IO
 	( enumHandle
 	, enumFile
-	, iterFile
 	, iterHandle
 	) where
 import Data.Enumerator
@@ -29,6 +28,9 @@
 -- This enumerator blocks until at least one byte is available from the
 -- handle, and might read less than the maximum buffer size in some
 -- cases.
+--
+-- The handle should be opened with no encoding, and in 'IO.ReadMode' or
+-- 'IO.ReadWriteMode'.
 enumHandle :: Integer -- ^ Buffer size
            -> IO.Handle
            -> Enumerator E.SomeException B.ByteString IO b
@@ -58,6 +60,9 @@
 -- | Read bytes from a stream and write them to a handle. If an exception
 -- occurs during file IO, enumeration will stop and 'Error' will be
 -- returned.
+--
+-- The handle should be opened with no encoding, and in 'IO.WriteMode' or
+-- 'IO.ReadWriteMode'.
 iterHandle :: IO.Handle -> Iteratee E.SomeException B.ByteString IO ()
 iterHandle h = continue step where
 	step EOF = yield () EOF
@@ -65,11 +70,3 @@
 	step (Chunks bytes) = Iteratee io where
 		put = mapM_ (B.hPut h) bytes
 		io = tryStep put (\_ -> return $ Continue step)
--- | Opens a file path in binary mode, and passes the handle to 'iterHandle'.
--- The file will be closed when the 'Iteratee' finishes.
-iterFile :: FilePath -> Iteratee E.SomeException B.ByteString IO ()
-iterFile path = Iteratee io where
-	withHandle = tryStep (IO.openBinaryFile path IO.WriteMode)
-	io = withHandle $ \h -> E.finally
-		(runIteratee (iterHandle h))
-		(IO.hClose h)
diff --git a/hs/Data/Enumerator/Text.hs b/hs/Data/Enumerator/Text.hs
--- a/hs/Data/Enumerator/Text.hs
+++ b/hs/Data/Enumerator/Text.hs
@@ -15,7 +15,6 @@
 	  enumHandle
 	, enumFile
 	, iterHandle
-	, iterFile
 	  -- * Codecs
 	, Codec
 	, encode
@@ -49,6 +48,9 @@
 -- | Read lines of text from the handle, and stream them to an 'Iteratee'.
 -- If an exception occurs during file IO, enumeration will stop and 'Error'
 -- will be returned. Exceptions from the iteratee are not caught.
+--
+-- The handle should be opened with an appropriate text encoding, and
+-- in 'IO.ReadMode' or 'IO.ReadWriteMode'.
 enumHandle :: IO.Handle -> Enumerator E.SomeException T.Text IO b
 enumHandle h = Iteratee . loop where
 	loop (Continue k) = withText $ \text -> if T.null text
@@ -68,6 +70,9 @@
 -- | Read text from a stream and write it to a handle. If an exception
 -- occurs during file IO, enumeration will stop and 'Error' will be
 -- returned.
+--
+-- The handle should be opened with an appropriate text encoding, and
+-- in 'IO.WriteMode' or 'IO.ReadWriteMode'.
 iterHandle :: IO.Handle -> Iteratee E.SomeException T.Text IO ()
 iterHandle h = continue step where
 	step EOF = yield () EOF
@@ -75,14 +80,6 @@
 	step (Chunks chunks) = Iteratee io where
 		put = mapM_ (T.hPutStr h) chunks
 		io = tryStep put (\_ -> return $ Continue step)
--- | Opens a file path in text mode, and passes the handle to 'iterHandle'.
--- The file will be closed when the 'Iteratee' finishes.
-iterFile :: FilePath -> Iteratee E.SomeException T.Text IO ()
-iterFile path = Iteratee io where
-	withHandle = tryStep (IO.openFile path IO.WriteMode)
-	io = withHandle $ \h -> E.finally
-		(runIteratee (iterHandle h))
-		(IO.hClose h)
 data Codec = Codec
 	{ codecName :: T.Text
 	, codecEncode :: [T.Text] -> Either E.SomeException [B.ByteString]
