2014-01-23 39 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。