
Hi Michael, Thanks for the information.
Essentailly, in a reverse HTTP, you'll have a standalone server running on some port that never talks to the outside world, and Apache will proxy all HTTP connections for your application to that server.
I hadn't heard of Reverse HTTP proxy before, but it seems to be the simplest option for me - as I'll want Hoogle to be able to run as a web server anyway. Taking a look it seems easy enough to configure in Apache, so seems the perfect answer.
There are at this point three main web frameworks in Haskell (that I'm aware of, someone correct me if I'm wrong): Yesod[1], Happstack[2] and Snap[3].
I've seen and looked at all the three main options. The one that seemed to appeal to me most was Wai+Warp - does that count as Yesod? One question on Wai - I see version 0.3.0 says "For that reason, this library includes Network.Wai.Enumerator" - but the .cabal file doesn't mention that file, and it's not included. Did you forget to edit the .cabal file? I think the use of LazyIO might appeal to me, as that is how Hoogle is currently structured, and I'd rather not switch to enumerators at this stage.
All of your desired features are easily implemented in Yesod except the timeout one.
I can implement timeout within my response easily enough, so I don't think that matters too much.
If you are interested in trying a migration to Yesod, just send me an email (either privately or on web-devel).
I think it's well documented enough that I'm not sure I'd have to. I've downloaded warp and will give it a try shortly. Thanks, Neil