Safe Haskell | None |
---|
This module provides support for serving compiled Heist templates using Happstack.
The primary function provided by this module is:
heistServe :: (Happstack m) => HeistState m -> m Response
It also provides the initHeistCompiled
helper function for
creating a HeistState
. Though you are free to use other functions
from the Heist library instead.
Here is a simple example:
module Main where import Control.Applicative ((<$>)) import Control.Monad (msum) import qualified Data.Text as T import Happstack.Server (dir, nullConf, nullDir, simpleHTTP, seeOther, toResponse) import Happstack.Server.Heist (heistServe, initHeistCompiled) import Heist (getParamNode) import Heist.Compiled (Splice, yieldRuntimeText) import qualified Text.XmlHtml as X -- | factorial splice factSplice :: (Monad m) => Splice m factSplice = do intStr <- T.unpack . X.nodeText <$> getParamNode let res = yieldRuntimeText $ do case reads intStr of [(n,[])] -> return (T.pack $ show $ product [1..(n :: Integer)]) _ -> return (T.pack $ "Unable to parse " ++ intStr ++ " as an Integer.") return $ res main :: IO () main = do heistState <- do r <- initHeistCompiled [(T.pack "fact", factSplice)] [] "." case r of (Left e) -> error $ unlines e (Right heistState) -> return $ heistState simpleHTTP nullConf $ msum [ dir "heist" $ heistServe heistState , nullDir >> seeOther "/heist/factorial" (toResponse "/heist/factorial") ]
It uses the following template file (factorial.tpl
):
<html> <head> <title>Factorial Page</title> </head> <body> <h1>Factorial Page</h1> <p>The factorial of 6 is <fact>6</fact></p> </body> </html>
For more information on using Compiled Heist Templates see:
http://snapframework.com/docs/tutorials/compiled-splices
And also see the Heist Section of the Happstack Crash Course:
Documentation
:: (MonadIO m, Monad n) | |
=> [(Text, Splice n)] | compiled splices |
-> [(Text, AttrSplice n)] | attribute splices |
-> FilePath | path to template directory |
-> m (Either [String] (HeistState n)) |
heistServe :: Happstack m => HeistState m -> m ResponseSource