【发布时间】:2012-02-23 21:58:42
【问题描述】:
【问题讨论】:
-
虽然我什么都不知道,但可能是模板haskell。当然(对我来说)模板 haskell 是很神奇的,所以你去吧:) 一个更简单的例子是 QuickCheck 的 quickcheckAll:它神奇地知道你所有的 prop_* 绑定并运行它们。
标签: haskell template-engine yesod hamlet
【问题讨论】:
标签: haskell template-engine yesod hamlet
哈姆雷特基于Template Haskell;特别是,quasiquoter(即[hamlet| ... |])用于内联模板,而拼接(即$(hamletFile "foo"))用于从文件创建模板。然后使用 Template Haskell 的自省功能访问这些变量。
这除了允许自动访问变量之外还有其他好处:
生成的模板可能比在运行时解析和解释的模板更有效,因为 Hamlet 模板在编译时被编译为常规 Haskell 代码。
从文件中读取模板时,文件在编译时被解析并嵌入到生成的二进制文件中,因此模板在运行时不必保存在同一位置,并且有效性模板的数量是静态确保的。
我相信这些优势适用于所有Shakespeare-family 模板。 The Haddock documentation 有更多关于可用准引用器和接头的信息。
【讨论】:
这是 Haskell 的 quasiquotation 的一个特性,即 [xxx| .... |] 语法。
准引用器可以访问范围内的任何变量,因此可以对它们进行插值。插值的实际实现(如果有)取决于准引用器本身。
【讨论】: