Hamlet jest oparty na Template Haskell; w szczególności, do tworzenia szablonów wbudowanych jest stosowany kod quasiquoter (tj. [hamlet| ... |]
), a do tworzenia szablonów z pliku stosuje się splot (to jest $(hamletFile "foo")
). Zmienne są następnie dostępne za pomocą funkcji introspekcji szablonu Haskella.
To ma swoje zalety poza umożliwiając automatyczny dostęp do zmiennych:
Powstałe szablony są prawdopodobnie bardziej skuteczne niż te, analizowany i interpretowany w czasie wykonywania, ponieważ szablony Hamlet są kompilowane do regularnego kodu Haskell w czasie kompilacji.
Podczas odczytywania szablonu z pliku, plik jest analizowany podczas kompilacji i osadzany w wynikowym pliku binarnym, więc szablony nie muszą być przechowywane w tej samej lokalizacji w czasie wykonywania, a ważność szablony są statycznie zabezpieczone.
Uważam, że te zalety mają zastosowanie do wszystkich szablonów rodzin Shakespeare. The Haddock documentation ma więcej informacji o dostępnych quasiquoters i spojeniach.
O ile nic nie wiem, to prawdopodobnie szablon haskell. Oczywiście (do mnie) szablon haskell to głęboka magia, więc proszę bardzo :) Prostszym przykładem tego jest quickcheck. Wszystko: w magiczny sposób wie o wszystkich wiązaniach prop_ * i uruchamia je. –