Hamlet se basa en Template Haskell; en particular, se utiliza un quasiquoter (es decir, [hamlet| ... |]
) para plantillas en línea, y un empalme (es decir, $(hamletFile "foo")
) se utiliza para crear plantillas a partir de un archivo. A continuación, se accede a las variables con las funciones de introspección de Template Haskell.
Esto tiene beneficios más allá de lo que permite el acceso automático a las variables:
Las plantillas resultantes probablemente sean más eficientes que los analizados e interpretados en tiempo de ejecución, ya que las plantillas de Hamlet son compilados a código regular de Haskell en tiempo de compilación.
Al leer una plantilla de un archivo, el archivo se analiza en tiempo de compilación e incrustado en el binario resultante, por lo que no es necesario mantener las plantillas en la misma ubicación en tiempo de ejecución y la validez de plantillas está garantizado estáticamente.
Creo que estas ventajas se aplican a todas las plantillas de la familia Shakespeare. The Haddock documentation tiene más información sobre los quasiquoters y empalmes disponibles.
Si bien no sé nada, probablemente sea la plantilla de Haskell. Por supuesto (para mí) template haskell es magia profunda, así que ahí lo tienes :) Un ejemplo más simple de lo mismo es QuickCheck's quickcheckAll: mágicamente conoce todas tus conexiones prop_ * y las ejecuta. –