WikiDer > Шаблон Haskell - Википедия
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Шаблон Haskell это экспериментальное расширение языка для Haskell язык программирования, реализованный в Компилятор Glasgow Haskell (версия 6 и новее). В ранних воплощениях он был также известен как Template Meta-Haskell.
Это позволяет во время компиляции метапрограммирование и генеративное программирование посредством манипулирования абстрактные синтаксические деревья и 'сращивание'возвращаются в программу. Абстрактный синтаксис представлен с использованием обычного Haskell типы данных а манипуляции производятся с помощью обычного Haskell функции.
'Квази-цитата' скобки [|
и |]
используются для получения абстрактного синтаксического дерева для заключенного выражения и скобок $(
и )
используются для преобразования абстрактного синтаксического дерева в код.
Начиная с GHC-6.10, Template Haskell обеспечивает поддержку определяемых пользователем квазиквотеров, что позволяет пользователям писать синтаксические анализаторы, которые могут генерировать код Haskell из произвольного синтаксиса. Этот синтаксис также применяется во время компиляции. Например, используя собственный квазиквотер для обычные выражения может выглядеть так:
digitsFollowedByLetters = [$ re | d + s + |]
Пример
Распространенная идиома - цитировать выражение, выполните некоторое преобразование выражения и вставьте результат обратно в программу. Это можно было бы записать так:
результат = $ (преобразование [| ввод |])