[Haskell-cafe] CGI module almost useless
Bjorn Bringert
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
>>> it:
>>>
>>> 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:
>>
>> http://www.dtek.chalmers.se/~d00bring/darcs/blob/lib/Network/SimpleCGI.hs
>>
>> 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
> remote
> past, I don't have the time and energy to maintain and/or extend this
> module
> 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:
http://www.cs.chalmers.se/~bringert/darcs/haskell-cgi/
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:
http://www.cs.chalmers.se/~bringert/darcs/haskell-cgi/examples/printinput.hs
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?
/Björn
More information about the Libraries
mailing list