Language.Haskell.TH.Quote
| Безопасный Haskell | Safe |
|---|---|
| Язык | Haskell2010 |
Содержание
Описание
Template Haskell поддерживает квазицитирование, позволяющее пользователям создавать фрагменты программы, записывая конкретный синтаксис напрямую. Квазицитатор — это, по сути, функция, преобразующая строку в AST Template Haskell. Этот модуль определяет тип данных QuasiQuoter, задающий квазицитатор q, который можно вызвать с помощью синтаксиса [q| ... string to parse ... |] при включённом расширении языка QuasiQuotes, а также некоторые вспомогательные функции для работы с квазицитаторами. Обратите внимание: этот пакет не определяет никаких парсеров — это ваша задача.
data QuasiQuoter Исходный код
Тип QuasiQuoter; значение q этого типа можно использовать в синтаксисе [q| ... string to parse ...|]. Фактически, для удобства QuasiQuoter определяет сразу несколько квазицитаторов, используемых в разных контекстах вставки кода. Если вас интересует только квазицитатор для выражений, определите QuasiQuoter только с полем quoteExp, а остальные поля оставьте заглушками, которые выдают ошибки.
Этот тип экспортируется из обоих пакетов: template-haskell-quasiquoter и template-haskell. Импортируйте его из более стабильного пакета template-haskell-quasiquoter, если вам не нужны все возможности интерфейса template-haskell.
Конструкторы
| QuasiQuoter | |
Поля
| |
quoteFile :: QuasiQuoter -> QuasiQuoter Исходный код
quoteFile принимает QuasiQuoter и преобразует его в квазицитатор, который читает данные из файла. Например, предположим, что asmq — это квазицитатор для языка ассемблера, позволяющий записать [asmq| ld r1, r2 |] в качестве выражения. Если определить asmq_f = quoteFile asmq, то цитата [asmq_f|foo.s|] будет брать данные из файла "foo.s", а не из встроенного текста.
Для обратной совместимости
dataToQa :: (Quote m, Data a) => (Name -> k) -> (Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. Data b => b -> Maybe (m q)) -> a -> m q Исходный код
dataToQa — внутренняя вспомогательная функция для создания обобщённых функций преобразования типов с экземплярами Data в различные представления для квазицитирования. Примеры её использования см. в исходном коде dataToExpQ и dataToPatQ: mkCon, mkLit и appQ можно перегружать, чтобы учитывать различия в синтаксисе выражений и шаблонов; antiQ позволяет переопределять обработку отдельных типов. Часто в качестве него указывают просто const Nothing, что отключает перегрузку.
dataToExpQ :: (Quote m, Data a) => (forall b. Data b => b -> Maybe (m Exp)) -> a -> m Exp Исходный код
dataToExpQ преобразует значение в представление Exp того же значения в стиле SYB. Функция принимает обработчик для переопределения случаев, специфичных для конкретных типов; см. liftData — более распространённый вариант.
dataToPatQ :: (Quote m, Data a) => (forall b. Data b => b -> Maybe (m Pat)) -> a -> m Pat Исходный код
dataToPatQ преобразует значение в представление Pat того же значения в стиле SYB. Функция принимает обработчик для случаев, специфичных для конкретных типов; чтобы использовать поведение по умолчанию, передайте const Nothing.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/template-haskell-2.24.0.0-7769/Language-Haskell-TH-Quote.html