[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