Может ли кто-нибудь указать мне пример использования Гамлета без Yesod? http://www.yesodweb.com/book/templates - это отличная документация, но я не могу заставить мой сеанс ghci отображать даже простой шаблон hamlet без сбоев.
Использование Гамлета в Хаскелле без Йесода
Ответ 1
Вот пример, показывающий большую часть основного материала, включая визуализацию типизированных 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 [email protected]{Haskell}>Haskell
<a [email protected]{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>
Ответ 2
Что ж, мы можем вручную обработать рендеринг URL и сделать что-то глупое, мы можем использовать это:
hamVal = [$hamlet|
<html>
<head>
<title>Test page
<body>Testing
|]
test :: ByteString
test = renderHamlet (\_ _ -> "") hamVal
Который работает как ожидалось. Я полагаю, что вы хотите сделать что-то более полезное, но этот тривиальный пример прекрасно работает, поэтому трудно сказать больше, не зная, где у вас проблемы.