Вы можете использовать Heist.renderTemplate
превратить шаблон в Blaze.ByteString.Builder.Builder
(это не сверкать в HTML, я предполагаю, что все в порядке), а затем установить, что через Web.Scotty.raw
. Например:
{-# LANGUAGE OverloadedStrings #-}
import Heist
import Heist.Interpreted
import Web.Scotty (scotty, get, raw, setHeader)
import Control.Monad.Trans.Either (runEitherT)
import Control.Monad.IO.Class (liftIO)
import Blaze.ByteString.Builder (toByteString)
import qualified Data.ByteString.Lazy as DBL
import qualified Data.Text.Lazy.Encoding as DT
import Text.XmlHtml
main = scotty 3000 $
get "/" $ do
-- normally you would probably load your templates from a file,
-- but to keep the example small
(Right heist) <- liftIO $ runEitherT $ initHeist emptyHeistConfig
let heist' = addTemplate "foo" [TextNode "Hello world!"] Nothing heist
(Just (builder, mime)) <- renderTemplate heist' "foo"
setHeader "Content-Type" (DT.decodeUtf8 $ DBL.fromStrict mime)
raw $ DBL.fromStrict $ toByteString builder
так теоретически я могу использовать Heist точно так же в Snap? – Mario
@Mario У меня нет опыта работы с Snap, но если вы можете передать его ByteString в ответ на запрос, обязательно. – xnyhps