[Haskell-cafe] Help using CGIT

Bjorn Bringert bringert at cs.chalmers.se
Fri Aug 24 03:38:15 EDT 2007


On Aug 23, 2007, at 3:34 , Rich Neswold wrote:

> On 8/22/07, Ian Lynagh <igloo at earth.li> wrote:
> On Wed, Aug 22, 2007 at 01:27:00PM -0500, Rich Neswold wrote:
> >
> > > newtype App a = App (ReaderT Connection (CGIT IO) a)
> > >    deriving (Monad, MonadIO, MonadReader Connection)
> >
> > Unfortunately, when another module tries to actually use the  
> monad, I
> > get warnings about "No instance for (MonadCGI App)". I tried  
> making an
> > instance:
> >
> > > instance MonadCGI App where
> > >     cgiAddHeader = ?
> > >     cgiGet = ?
>
> You have three choices:
>
> 1:
>
> 2:
>
> 3:
> Provide a single instance for App that does the whole thing:
> instance MonadCGI App where
>     cgiAddHeader n v = App $ lift $ cgiAddHeader n v
>     cgiGet x = App $ lift $ cgiGet x
> This one you would obviously have to change if you added a StateT.
>
> Bingo! Method #3 works beautifully! I missed the using-lift-with- 
> the-constructor permutation.
>
> Thanks for your help!

I started writing a tutorial for Haskell web programming with the cgi  
package a while back, but haven't worked on it for a while, see  
http://www.haskell.org/haskellwiki/Practical_web_programming_in_Haskell
I haven't added it to the list of tutorials yet, since it's still  
rather incomplete.

The section on using CGIT is just a stub, perhaps you would like to  
contribute to it? See
http://www.haskell.org/haskellwiki/ 
Practical_web_programming_in_Haskell#Extending_the_CGI_monad_with_monad_ 
transformers

/Björn


More information about the Haskell-Cafe mailing list