Szablon Haskella
Template Haskell to eksperymentalne rozszerzenie języka programowania Haskell zaimplementowane w kompilatorze Glasgow Haskell (wersja 6 i nowsze). We wczesnych wcieleniach był również znany jako Szablon Meta-Haskell.
Umożliwia metaprogramowanie w czasie kompilacji i programowanie generatywne poprzez manipulowanie abstrakcyjnymi drzewami składni i „ łączenie ” wyników z powrotem w program. Abstrakcyjna składnia jest reprezentowana przy użyciu zwykłych typów danych Haskella , a manipulacje są wykonywane przy użyciu zwykłych funkcji Haskella .
Nawiasy kwadratowe „ quasi- cytat” [|
i |]
są używane do uzyskania abstrakcyjnego drzewa składni dla załączonego wyrażenia, a nawiasy „splice” $(
i )
są używane do konwersji z abstrakcyjnego drzewa składni na kod.
Począwszy od GHC-6.10, Template Haskell zapewnia obsługę quasi-cudzysłowów zdefiniowanych przez użytkownika, co pozwala użytkownikom pisać parsery, które mogą generować kod Haskella z dowolnej składni. Ta składnia jest również wymuszana w czasie kompilacji. Na przykład użycie niestandardowego quasi-cudzysłowu dla wyrażeń regularnych może wyglądać tak:
digitsFollowedByLetters = [ $ re | \ d + \ s + | ]
Przykład
Powszechnym idiomem jest quasi-cytowanie wyrażenia , wykonanie pewnej transformacji na wyrażeniu i wklejenie wyniku z powrotem do programu. Można to zapisać jako:
wynik = $ ( przekształć [ | wejście | ] )