Гамлет автоматический доступ к переменным в области видимости - PullRequest
5 голосов
/ 01 февраля 2012

Из книги Yesod .

Гамлет автоматически получает доступ к переменным в области видимости при вызове.Нет необходимости специально передавать переменные в.

Что это за глубокая магия?Как он может автоматически знать, какие переменные находятся в области видимости?

Ответы [ 2 ]

9 голосов
/ 01 февраля 2012

Гамлет основан на Шаблон Haskell ; в частности, квазиквотер (т. е. [hamlet| ... |]) используется для встроенных шаблонов, а сращивание (т. е. $(hamletFile "foo")) используется для создания шаблонов из файла. Затем к переменным обращаются с помощью функций самоанализа Template Haskell.

Это дает преимущества, помимо автоматического доступа к переменным:

  • Полученные шаблоны, вероятно, более эффективны, чем анализируемые и интерпретируемые во время выполнения, поскольку шаблоны Hamlet компилируются в обычный код на Haskell во время компиляции.

  • При чтении шаблона из файла файл анализируется во время компиляции и встраивается в полученный двоичный файл, поэтому шаблоны не нужно хранить в одном и том же месте во время выполнения, и срок действия шаблонов обеспечивается статически.

Я считаю, что эти преимущества применимы ко всем шаблонам Шекспира . Документация Haddock содержит больше информации о доступных квазиквотерах и сращиваниях.

4 голосов
/ 01 февраля 2012

Это особенность квазиквотации на Haskell *, которая является синтаксисом [xxx| .... |].

Квазиквотер может обращаться к любым переменным в области видимости, поэтому их можно интерполировать. Фактическая реализация интерполяции (если таковая имеется) зависит от самого квазиквотера.

...