Использование Гамлета в Хаскеле без Йесода - PullRequest
11 голосов
/ 16 июля 2011

Может кто-нибудь указать мне пример использования Гамлета без есода?http://www.yesodweb.com/book/templates - отличная документация, но я не могу заставить мой сеанс ghci отобразить даже простой шаблон деревушки без сбоев.

Ответы [ 2 ]

16 голосов
/ 16 июля 2011

Вот пример, показывающий большинство основных вещей, включая рендеринг набранных URL.

{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}

import Data.Text
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet hiding (renderHtml)

data Url = Haskell | Yesod

renderUrl Haskell _ = pack "http://haskell.org"
renderUrl Yesod   _ = pack "http://www.yesodweb.com"

title = pack "This is in scope of the template below"

template :: HtmlUrl Url
template = [hamlet|
<html>
    <head>
        #{title}
    <body>
        <p>
            <a href=@{Haskell}>Haskell
            <a href=@{Yesod}>Yesod
|]

main = do
    let html = template renderUrl
    putStrLn $ renderHtml html

Вывод:

<html><head>This is in scope of the template below</head>
<body><p><a href="http://haskell.org">Haskell</a>
<a href="http://www.yesodweb.com">Yesod</a>
</p>
</body>
</html>
3 голосов
/ 16 июля 2011

Что ж, мы делаем ручную рендеринг URL и делаем вещи самым глупым способом, который работает, мы можем использовать это:

hamVal = [$hamlet| 
<html>
    <head>
        <title>Test page
    <body>Testing
|]

test :: ByteString
test = renderHamlet (\_ _ -> "") hamVal

, который работает как ожидалось.Я полагаю, что вы хотите сделать что-то более полезное, но этот тривиальный пример прекрасно работает, поэтому трудно сказать больше, не зная, в чем проблема.

...