哈姆雷特自动访问范围内的变量

Dan*_*ton 5 haskell template-engine yesod hamlet

来自Yesod Book.

Hamlet在调用时自动访问范围内的变量.没有必要专门传递变量.

这个深刻的魔法是什么?它如何自动知道范围内的变量?

ehi*_*ird 9

哈姆雷特基于模板Haskell ; 特别是,quasiquoter(ie [hamlet| ... |])用于内联模板,而splice(ie $(hamletFile "foo"))用于从文件创建模板.然后使用Template Haskell的内省特征访问变量.

除了允许自动访问变量之外,这还有其优点:

  • 由于在编译时将Hamlet模板编译为常规Haskell代码,因此生成的模板可能比在运行时解析和解释的模板更有效.

  • 从文件中读取模板时,文件在编译时被解析并嵌入到生成的二进制文件中,因此模板不必在运行时保留在同一位置,并且模板的有效性是静态保证的.

我相信这些优势适用于所有莎士比亚 -家庭模板.Haddock文档提供了有关可用的quasiquoter和splices的更多信息.