module Main where
import Happstack.Server
import Control.Monad.State
-- flip evalStateT 0 has a type of StateT Int IO a -> IO () a
-- and is the suitable transformer to be passed as the first parameter to
-- simpleHTTP'
main :: IO ()
main = do
putStrLn "Now listening on port 8880"
simpleHTTP' (flip evalStateT 0) (Conf 8880 Nothing) handler
handler :: ServerPartT (StateT Int IO) String
handler = do
-- We can use the MonadTrans instance of ServerPartT in order to lift a StateT computation
-- into the ServerPartT monad
i <- lift $ do
modify (+1)
get
return . show $ i