@@ -1,4 +1,4 @@
1−{-# LANGUAGE ExistentialQuantification #-}
1+{-# LANGUAGE Rank2Types #-}
22module Network.Wai
33 ( -- * Data types
44 -- ** Request method
@@ -23,6 +23,8 @@ module Network.Wai
2323 , Status (..)
2424 , statusCode
2525 , statusMessage
26+ -- * Enumerator
27+ , Enumerator (..)
2628 -- * WAI interface
2729 , Request (..)
2830 , Response (..)
@@ -233,6 +235,9 @@ statusMessage Status405 = B8.pack "Method Not Allowed"
233235statusMessage Status500 = B8.pack "Internal Server Error"
234236statusMessage (Status _ m) = m
235237
238+data Enumerator = Enumerator (forall a.
239+ ((a -> B.ByteString -> IO (Either a a)) -> a -> IO a))
240+
236241data Request = Request
237242 { requestMethod :: Method
238243 , httpVersion :: HttpVersion
@@ -250,7 +255,7 @@ data Request = Request
250255data Response = Response
251256 { status :: Status
252257 , headers :: [(ResponseHeader, B.ByteString)]
253− , body :: Either FilePath ((B.ByteString -> IO ()) -> IO ())
258+ , body :: Either FilePath Enumerator
254259 }
255260
256261type Application = Request -> IO Response