
Hello, I would like ask to change WAI API a bit. Please include the following data constructor for Response: ResponseIO Status ResponseHeaders (Socket -> IO Bool) # Please choose better name than ResponseIO The function whose type is Socket -> IO Bool is to send a HTTP body to the socket and returns keepalive-or-not. This opens possibilities to find a better sending scheme than that which Warp adopts by default. I'm implementing a classical web server library on WAI (wai-app-file-cgi). It sends files to clients with ResponseFile. Warp uses the sendfile library for ResponseFile. The sendfile library uses (unnecessary) hSeek and hFileSize which call system calls. System calls causes context switches. Since GHC7's IO manager uses a single kernel thread, all Haskell threads stops. Calling system calls gives significant performance impact. ResponseIO enables to choose a function which sends files with minimum system calls for WAI users. I have already implemented this both in wai and warp, and confirmed that this works well. --Kazu