Spec-Zone.ru › Haskell 9

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

Поля

  • quoteExp :: String -> Q Exp

    Квазицитатор для выражений, вызываемый цитатами вида lhs = $[q|...]

  • quotePat :: String -> Q Pat

    Квазицитатор для шаблонов, вызываемый цитатами вида f $[q|...] = rhs

  • quoteType :: String -> Q Type

    Квазицитатор для типов, вызываемый цитатами вида f :: $[q|...]

  • quoteDec :: String -> Q [Dec]

    Квазицитатор для объявлений, вызываемый цитатами верхнего уровня

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API