[web-devel] Hoogle Advice

Jeremy Shaw jeremy at n-heptane.com
Tue Jan 25 19:35:24 CET 2011


On Jan 25, 2011, at 12:10 PM, Michael Snoyman wrote:

>
>>  7. the ServerPartT monad has a built-in FilterT monad which makes  
>> it easy
>> to apply a function (Response -> Response) to modify the response.
>
> In all honesty, this is an argument *against* frameworks, not for
> them: at a WAI level, we don't need a FilterT monad, since an
> application is just a function.
>
> (And I can't believe I'm giving arguments against frameworks here, I
> obviously think they're a good thing. I'm just trying to be fair.)

Sure, you can do everything at the low-level. The idea is to add  
value. Ultimately happstack calls this function,

simpleHTTP'' :: (ToMessage b, Monad m, Functor m) => ServerPartT m b - 
 > Request -> m Response

which is basically a function to convert a ServerPartT into a WAI- 
like, type Application = Request -> IO Response. :)

The value added by the FilterT monad is that it allows you to apply a  
transformation to the Response before you actually have created the  
Response.

For example, I may have a function that adds a session cookie. But I  
don't have to structure my code so that the function is run after I  
have generated the response. For example, lets say I have a function  
that sets a cookie and returns the response body as HTML:


myPart :: ServerPart Html
myPart =
	do addCookie someCookie
              return $ <html>...</html>

I can't add the cookie directly to the Response yet, because this  
function returns Html not a Response. The cookie is added later after  
the Html is converted to a Response.

I assume the WriterT (Endo [Header]) thing in yesod serves a similar  
purpose ?

- jeremy 



More information about the web-devel mailing list