2014-01-23 41 views

回答

7

hamlet产生评估为blaze表达式的准量表。使用Text.Blaze.Html.Renderer.String.renderHtml可以将它们渲染为一个字符串。

让我们先从简单的非HTML例如:

{-# LANGUAGE QuasiQuotes #-} 
import Text.Blaze.Html.Renderer.String (renderHtml) 
import Text.Hamlet 

greet name = [shamlet|Hello world #{name}|] 
-- This prints "Hello world John Foo" 
main = putStrLn $ renderHtml $ greet "John Foo" 

为了提高效率,你也可以使用Text代替StringText.Blaze.Html.Renderer.Text.renderHtml

写这一个文件是不是从标准Haskell的不同做法。例如,您可以使用writeFile而不是putStrLn来完成此操作。你只需要修改的最后一行

main = do writeFile "greet.txt" $ renderHtml $ greet "John Foo" 

现在我们只需要添加HTML标记,而不是使用纯文本的。请参阅the Shakespeare documentation作进一步参考。

{-# LANGUAGE QuasiQuotes #-} 
import Text.Blaze.Html.Renderer.String (renderHtml) 
import Text.Hamlet 

greet name = [shamlet| 
       $doctype 5 
       <html> 
        <head> 
         <title>Greeting for #{name} 
        <body> 
         <h2> 
          Hello world #{name}|] 

main = writeFile "greet.html" $ renderHtml $ greet "John Foo" 

greet.html现在包含静态呈现的问候HTML。