[Haskell-cafe] CGI module almost useless
bringert at cs.chalmers.se
Tue Jun 14 17:06:38 EDT 2005
Sven Panne wrote:
> [ Moving this thread slowly to the libraries list... ]
> Bjorn Bringert wrote:
>> John Goerzen wrote:
>>> My apologies if this sounds like a bit of a rant; I know people put good
>>> effort into this, but....
>>> The Network.CGI module in fptools (and GHC) is not very useful. I think
>>> that it should be removed or re-tooled. Here are the main problems with
>>> 1. It does not permit custom generation of output headers. Thus the CGI
>>> script cannot do things like set cookies, manage HTTP auth, etc.
>>> 2. It does not permit generation of anything other than text/html
>>> documents. Many CGI scripts are used to manage other types of
>>> documents. Notably this makes it incompatible with serving up even
>>> basic things like stylesheets and JPEGs.
>>> 3. It does not permit the use of any custom design to serve up HTML,
>>> forcing *everything* to go through Text.Html. This makes it impossible
>>> to do things like serving up HTML files from disk.
>>> 4. There is documentation in the code, but it is as comments only, and
>>> doesn't show up in the Haddock-generated GHC library reference. (Should
>>> be an easy fix)
>>> 5. It does not appear to support file uploads in any sane fashion
>>> Is there a better CGI module out there somewhere that I'm missing, or
>>> should I just set about writing my own?
>> I wrote this module (based on the Network.CGI code) a while ago:
>> I don't remember what it does really, but I think it solves issues
>> 1,2,3 and some of 4.
> Although (among other people) I did some hacking in this module in the
> past, I don't have the time and energy to maintain and/or extend this
> anymore. It would be really great if somebody more actively working in this
> area could take the spec lead here and push the development via discussions
> here on this library list. John? Björn? A few general design thoughts:
> * To keep people's mind sane, backwards compatibility with the existing
> Network.CGI would be a very worthy goal.
> * Don't use any Haskell language extension available. :-) Currently the
> module can be used e.g. by Hugs in H98 mode, and keeping it that way
> would again be something very desirable.
I have cleaned up my CGI module linked to above, added some
documentation, and compatibility wrappers to support the current
Network.CGI interface. The code is in a darcs repo at:
It fixes 1,2,3 and 4 from John's list, and 1 from Sven's. It relies on
some extensions as it uses Control.Monad.State.
Here is a very simple example which uses the interface:
To the people here who are interested in the CGI module: What do you
think of this interface? Could we replace the current Network.CGI with
something like this?
More information about the Libraries