yesod-examples-0.5.0: yesod/tutorial/session.lhs
> {-# LANGUAGE TypeFamilies, QuasiQuotes, TemplateHaskell #-}
> import Yesod
> import Control.Applicative ((<$>), (<*>))
>
> data Session = Session
> type Handler = GHandler Session Session
> mkYesod "Session" [$parseRoutes|
> / Root GET POST
> |]
> getRoot :: Handler RepHtml
> getRoot = do
> sess <- reqSession `fmap` getRequest
> hamletToRepHtml [$hamlet|
> %form!method=post
> %input!type=text!name=key
> %input!type=text!name=val
> %input!type=submit
> %h1 $show.sess$
> |]
>
> postRoot :: Handler ()
> postRoot = do
> (key, val) <- runFormPost' $ (,) <$> stringInput "key" <*> stringInput "val"
> setSession key val
> liftIO $ print (key, val)
> redirect RedirectTemporary Root
>
> instance Yesod Session where
> approot _ = ""
> clientSessionDuration _ = 1
> main = basicHandler 3000 Session