Spec-Zone.ru › Haskell 7

Language.Haskell.TH

Safe Haskell None
Language Haskell2010

Содержание

  • Моноид и его операции
    • Администрирование: ошибки, местоположения и IO
    • Запрос к компилятору
      • Reify
      • Поиск имени
      • Поиск экземпляра
      • Поиск ролей
      • Поиск аннотаций
  • Типизированные выражения
  • Имена
    • Создание имен
    • Разбор имен
    • Встроенные имена
  • Алгебраические типы данных
    • Объявления
    • Выражения
    • Шаблоны
    • Типы
  • Функции библиотеки
    • Сокращения
    • Конструкторы, поднятые до Q
      • Литералы
      • Шаблоны
      • Ограничения шаблонов
      • Выражения
        • Диапазоны
          • Диапазоны с большей косвенностью
        • Утверждения
      • Типы
        • Литералы типов
        • Строгость
        • Контексты класса
      • Виды
      • Роли
      • Объявления верхнего уровня
        • Данные
        • Класс
        • Аннотации ролей
        • Семейства типов/семейства данных
        • Интерфейс внешней функции (FFI)
        • Предикаты
  • Красивый вывод

Описание

Публичный интерфейс Template Haskell

Для другой документации, обратитесь к: http://www.haskell.org/haskellwiki/Template_Haskell

Моноид и его операции

data Q a Исходный код

Экземпляры

Monad Q
Functor Q
Applicative Q
Quasi Q

runQ :: Quasi m => Q a -> m a Исходный код

Администрирование: ошибки, местоположения и IO

reportError :: String -> Q () Исходный код

Сообщите пользователю об ошибке, но позвольте текущему вычислению продолжить работу. Чтобы прервать вычисление, используйте fail.

reportWarning :: String -> Q () Исходный код

Сообщите пользователю об предупреждении и продолжите работу.

report :: Bool -> String -> Q () Исходный код

Устарело: используйте reportError или reportWarning вместо этого.

Сообщите об ошибке (True) или предупреждении (False), но продолжайте; используйте fail для остановки.

recover Исходный код

Аргументы

:: Q a

обработчик для вызова при неудаче

-> Q a

вычисление для выполнения

-> Q a

Восстановиться от ошибок, поднятых reportError или fail.

location :: Q Loc Исходный код

Местоположение, в котором выполняется данное вычисление.

data Loc Исходный код

Конструкторы

Loc

Поля

loc_filename :: String
loc_package :: String
loc_module :: String
loc_start :: CharPos
loc_end :: CharPos

Экземпляры

runIO :: IO a -> Q a Исходный код

Функция runIO позволяет запускать вычисление I/O в моноиде Q. Обратите внимание: вам гарантируется порядок вызовов runIO внутри одного вычисления Q, но не порядок, в котором выполняются вставки.

Примечание: по разным причинам, ручки stdout и stderr не обязательно сбрасываются, когда компилятор завершает работу, поэтому вам нужно сбросить их самостоятельно.

Запрос к компилятору

Reify

reify :: Name -> Q Info Исходный код

reify извлекает информацию о Name.

thisModule :: Q Модуль Исходный код

Возвращает Модуль в месте вставки. Может быть использован в качестве входного параметра для reifyModule.

data Info Исходный код

Получено из reify в Q монаде.

Конструкторы

ClassI Dec [InstanceDec]

Класс с списком его видимых экземпляров.

ClassOpI Имя Тип РодительскоеИмя Фиксированность

Метод класса.

TyConI Dec

«Простой» конструктор типа. «Более сложные» конструкторы типов возвращаются с использованием PrimTyConI или FamilyI соответственно.

FamilyI Dec [InstanceDec]

Семейство типов или данных с списком его видимых экземпляров. Закрытое семейство типов возвращается с 0 экземплярами.

PrimTyConI Имя Арность Неподнятый

«Примитивный» конструктор типа, который нельзя выразить с помощью Dec. Примеры: (->), Int#.

DataConI Имя Тип РодительскоеИмя Фиксированность

Конструктор данных.

VarI Имя Тип (МожетБыть Dec) Фиксированность

Переменная «значения» (в отличие от переменной типа, см. TyVarI).

Поле Maybe Dec содержит Just объявление, которое определило переменную — включая правую часть объявления — или же Nothing, в случае, если правая часть недоступна для компилятора. В настоящее время это значение _всегда_ Nothing: возвращение правой части еще не реализовано из-за отсутствия интереса.

TyVarI Имя Тип

Переменная типа.

Поле Type содержит тип, лежащий в основе переменной. В настоящее время это всегда VarT theName, но будущие изменения могут позволить уточнение этого.

Экземпляры

Eq Info
Data Info
Ord Info
Show Info
Generic Info
Ppr Info
type Rep Info

data ModuleInfo Исходный код

Получено из reifyModule в Q монаде.

Конструкторы

ModuleInfo [Модуль]

Содержит список импортов модуля.

Экземпляры

Eq ModuleInfo
Data ModuleInfo
Ord ModuleInfo
Show ModuleInfo
Generic ModuleInfo
Ppr ModuleInfo
type Rep ModuleInfo

type InstanceDec = Dec Исходный код

InstanceDec описывает один экземпляр класса или функционала типа. Это просто Dec, но гарантируется, что он будет одним из следующих:

  • InstanceD (с пустым [Dec])
  • DataInstD или NewtypeInstD (с пустым производным [Name])
  • TySynInstD

type ParentName = Имя Исходный код

В ClassOpI и DataConI, имя родительского класса или типа.

type Арность = Int Исходный код

В PrimTyConI, арность конструктора типа.

type Неподнятый = Bool Исходный код

В PrimTyConI, конструктор типа неподнятого типа?

Поиск имени

lookupTypeName :: Строка -> Q (МожетБыть Имя) Исходный код

Ищет заданное имя в области видимости текущей вставки (пространство имен типов). Для получения более подробной информации см. Language.Haskell.TH.Syntax.

lookupValueName :: Строка -> Q (МожетБыть Имя) Исходный код

Ищет заданное имя в области видимости текущей вставки (пространство имен значений). Для получения более подробной информации см. Language.Haskell.TH.Syntax.

Поиск экземпляра

reifyInstances :: Имя -> [Тип] -> Q [InstanceDec] Исходный код

reifyInstances nm tys возвращает список видимых экземпляров nm tys. То есть, если nm — имя класса типа, то возвращаются все экземпляры этого класса для типов tys. В противном случае, если nm — имя семейства данных или семейства типов, возвращаются все экземпляры этого семейства для типов tys.

isInstance :: Имя -> [Тип] -> Q Bool Исходный код

Является ли список экземпляров, возвращаемый reifyInstances, непустым?

Поиск ролей

reifyRoles :: Имя -> Q [Роль] Исходный код

reifyRoles nm возвращает список ролей, связанных с параметрами тикона nm. Возникает ошибка, если nm не найден или не является тиконом. Возвращаемый список никогда не должен содержать InferR.

Поиск аннотаций

reifyAnnotations :: Data a => AnnLookup -> Q [a] Исходный код

reifyAnnotations target возвращает список аннотаций, связанных с target. Возвращаются только аннотации с правильным типом. Если у вас есть аннотации Int и String для одной и той же цели, вы должны вызвать эту функцию дважды.

data AnnLookup Исходный код

Цель аннотации для reifyAnnotations

Конструкторы

AnnLookupModule Модуль
AnnLookupName Имя

Экземпляры

Eq AnnLookup
Data AnnLookup
Ord AnnLookup
Show AnnLookup
Generic AnnLookup
type Rep AnnLookup

Типизированные выражения

data TExp a Исходный код

unType :: TExp a -> Выражение Исходный код

Имена

data Имя Исходный код

Абстрактный тип, представляющий имена в синтаксическом дереве.

Name можно создать несколькими способами, которые предоставляют различные гарантии захвата имен (см. Language.Haskell.TH.Syntax для объяснения захвата имен):

  • Встроенный синтаксис 'f и ''T могут использоваться для создания имен. Выражение 'f дает Name, которое ссылается на значение f в текущей области видимости, а ''T дает Name, которое ссылается на тип T в текущей области видимости. Эти имена никогда не могут быть захвачены.
  • lookupValueName и lookupTypeName аналогичны 'f и ''T соответственно, но Name ищутся в момент выполнения текущей вставки. Эти имена никогда не могут быть захвачены.
  • newName монадным способом генерирует новое имя, которое никогда не может быть захвачено.
  • mkName генерирует имя, которое может быть захвачено.

Имена, созданные с помощью newName и mkName , могут использоваться в связываниях (например, let x = ... или x -> ...), но имена, созданные с помощью lookupValueName, lookupTypeName, 'f, ''T, не могут.

Экземпляры

Eq Имя
Data Имя
Ord Имя
Show Имя
Generic Имя
Ppr Имя
type Rep Имя

data ПространствоИмен Исходный код

Экземпляры

Eq ПространствоИмен
Data ПространствоИмен
Ord ПространствоИмен
Generic ПространствоИмен
type Rep ПространствоИмен

Создание имен

mkName :: Строка -> Имя Исходный код

Генерирует имя, которое может быть захвачено. Вхождения таких имен будут разрешаться в соответствии с правилами области видимости Haskell в месте вхождения.

Например:

f = [| pi + $(varE (mkName "pi")) |]
...
g = let pi = 3 in $f

В этом случае, g преобразуется в

g = Prelude.pi + 3

Обратите внимание, что mkName может использоваться с квалифицированными именами:

mkName "Prelude.pi"

См. также dyn для полезного комбинатора. Приведенный выше пример можно переписать с помощью dyn как

f = [| pi + $(dyn "pi") |]

newName :: Строка -> Q Имя Исходный код

Генерирует свежее имя, которое не может быть захвачено.

Например, это:

f = $(do
  nm1 <- newName "x"
  let nm2 = mkName "x"
  return (LamE [VarP nm1] (LamE [VarP nm2] (VarE nm1)))
 )

сгенерирует вставку

f = \x0 -> \x -> x0

В частности, вхождение VarE nm1 относится к связыванию VarP nm1, и не захватывается связыванием VarP nm2.

Хотя имена, сгенерированные с помощью newName , не могут быть захвачены, они могут захватить другие имена. Например, это:

g = $(do
  nm1 <- newName "x"
  let nm2 = mkName "x"
  return (LamE [VarP nm2] (LamE [VarP nm1] (VarE nm2)))
 )

сгенерирует вставку

g = \x -> \x0 -> x0

так как вхождение VarE nm2 захватывается самым внутренним связыванием x, а именно VarP nm1.

Разобрать имена

nameBase :: Имя -> Строка Исходный код

Имя без префикса модуля

nameModule :: Имя -> МожетБыть Строка Исходный код

Префикс модуля имени, если он существует

Встроенные имена

tupleTypeName :: ЦелоеЧисло -> Имя Исходный код

Конструктор кортежного типа

tupleDataName :: Int -> Name Source

Конструктор данных кортежа

unboxedTupleTypeName :: Int -> Name Source

Конструктор типов нераспакованных кортежей

unboxedTupleDataName :: Int -> Name Source

Конструктор данных нераспакованных кортежей

Алгебраические типы данных

Предпочтительнее использовать строчные версии (операторы синтаксиса) этих конструкторов, поскольку они лучше сочетаются с цитатами ([| |]) и вставками ($( ... ))

Объявления

data Dec Source

Конструкторы

FunD Name [Clause]
{ f p1 p2 = b where decs }
ValD Pat Body [Dec]
{ p = b where decs }
DataD Cxt Name [TyVarBndr] [Con] [Name]
{ data Cxt x => T x = A x | B (T x)
       deriving (Z,W)}
NewtypeD Cxt Name [TyVarBndr] Con [Name]
{ newtype Cxt x => T x = A (B x)
       deriving (Z,W)}
TySynD Name [TyVarBndr] Type
{ type T x = (x,x) }
ClassD Cxt Name [TyVarBndr] [FunDep] [Dec]
{ class Eq a => Ord a where ds }
InstanceD Cxt Type [Dec]
{ instance Show w => Show [w]
       where ds }
SigD Name Type
{ length :: [a] -> Int }
ForeignD Foreign
{ foreign import ... }
{ foreign export ... }
InfixD Fixity Name
{ infix 3 foo }
PragmaD Pragma
{ {--} }
FamilyD FamFlavour Name [TyVarBndr] (Maybe Kind)
{ type family T a b c :: * }
DataInstD Cxt Name [Type] [Con] [Name]
{ data instance Cxt x => T [x] = A x
                                | B (T x)
       deriving (Z,W)}
NewtypeInstD Cxt Name [Type] Con [Name]
{ newtype instance Cxt x => T [x] = A (B x)
       deriving (Z,W)}
TySynInstD Name TySynEqn
{ type instance ... }
ClosedTypeFamilyD Name [TyVarBndr] (Maybe Kind) [TySynEqn]
{ type family F a b :: * where ... }
RoleAnnotD Name [Role]
{ type role T nominal representational }
StandaloneDerivD Cxt Type
{ deriving instance Ord a => Ord (Foo a) }
DefaultSigD Name Type
{ default size :: Data a => a -> Int }

Экземпляры

Eq Dec
Data Dec
Ord Dec
Show Dec
Generic Dec
Ppr Dec
type Rep Dec

data Con Source

Конструкторы

NormalC Name [StrictType]
C Int a
RecC Name [VarStrictType]
C { v :: Int, w :: a }
InfixC StrictType Name StrictType
Int :+ a
ForallC [TyVarBndr] Cxt Con
forall a. Eq a => C [a]

Экземпляры

Eq Con
Data Con
Ord Con
Show Con
Generic Con
Ppr Con
type Rep Con

data Clause Source

Конструкторы

Clause [Pat] Body [Dec]
f { p1 p2 = body where decs }

Примеры использования

Eq Clause
Data Clause
Ord Clause
Show Clause
Generic Clause
Ppr Clause
type Rep Clause

data Strict Source

Конструкторы

IsStrict
NotStrict
Unpacked

Примеры использования

Eq Strict
Data Strict
Ord Strict
Show Strict
Generic Strict
type Rep Strict

data Foreign Source

Конструкторы

ImportF Callconv Safety String Name Type
ExportF Callconv String Name Type

Примеры использования

Eq Foreign
Data Foreign
Ord Foreign
Show Foreign
Generic Foreign
Ppr Foreign
type Rep Foreign

data Callconv Source

Конструкторы

CCall
StdCall
CApi
Prim
JavaScript

Примеры использования

Eq Callconv
Data Callconv
Ord Callconv
Show Callconv
Generic Callconv
type Rep Callconv

data Безопасность Source

Конструкторы

Unsafe
Safe
Interruptible

Примеры использования

Eq Безопасность
Data Безопасность
Ord Безопасность
Show Безопасность
Generic Безопасность
type Rep Безопасность

data Директива Source

Конструкторы

InlineP Имя Inline RuleMatch Phases
SpecialiseP Имя Тип (Может быть Inline) Phases
SpecialiseInstP Тип
RuleP Строка [RuleBndr] Exp Exp Phases
AnnP AnnTarget Exp
LineP Целое число Строка

Примеры использования

Eq Pragma
Data Pragma
Ord Pragma
Show Pragma
Generic Pragma
Ppr Pragma
type Rep Pragma

data Inline Источник

Конструкторы

NoInline
Inline
Inlinable

Примеры использования

Eq Inline
Data Inline
Ord Inline
Show Inline
Generic Inline
Ppr Inline
type Rep Inline

data RuleMatch Источник

Конструкторы

ConLike
FunLike

Примеры использования

Eq RuleMatch
Data RuleMatch
Ord RuleMatch
Show RuleMatch
Generic RuleMatch
Ppr RuleMatch
type Rep RuleMatch

data Этапы Источник

Конструкторы

AllPhases
FromPhase Int
BeforePhase Int

Примеры использования

Eq Этапы
Data Этапы
Ord Этапы
Show Этапы
Generic Этапы
Ppr Этапы
type Rep Этапы

data RuleBndr Источник

Конструкторы

RuleVar Имя
TypedRuleVar Имя Тип

Примеры использования

Eq RuleBndr
Data RuleBndr
Ord RuleBndr
Show RuleBndr
Generic RuleBndr
Ppr RuleBndr
type Rep RuleBndr

data Целевая аннотация Источник

Конструкторы

Аннотация модуля
Аннотация типа Имя
Аннотация значения Имя

Примеры использования

Eq Целевая аннотация
Data Целевая аннотация
Ord Целевая аннотация
Show Целевая аннотация
Generic Целевая аннотация
type Rep Целевая аннотация

data FunDep Source

Конструкторы

FunDep [Name] [Name]

Примеры

Eq FunDep
Data FunDep
Ord FunDep
Show FunDep
Generic FunDep
Ppr FunDep
type Rep FunDep

data FamFlavour Source

Конструкторы

TypeFam
DataFam

Примеры

Eq FamFlavour
Data FamFlavour
Ord FamFlavour
Show FamFlavour
Generic FamFlavour
Ppr FamFlavour
type Rep FamFlavour

data TySynEqn Source

Одно уравнение экземпляра семейства типов или закрытого семейства типов. Аргументы — это шаблоны типов левой части и результат правой части.

Конструкторы

TySynEqn [Type] Type

Примеры

Eq TySynEqn
Data TySynEqn
Ord TySynEqn
Show TySynEqn
Generic TySynEqn
type Rep TySynEqn

data Fixity Source

Конструкторы

Fixity Int FixityDirection

Примеры

Eq Fixity
Data Fixity
Ord Fixity
Show Fixity
Generic Fixity
type Rep Fixity

data НаправлениеФиксирования Source

Конструкторы

InfixL
InfixR
InfixN

Примеры

Eq НаправлениеФиксирования
Data НаправлениеФиксирования
Ord НаправлениеФиксирования
Show НаправлениеФиксирования
Generic НаправлениеФиксирования
type Rep НаправлениеФиксирования

defaultFixity :: Fixity Source

Значение по умолчанию для фиксированности: infixl 9

maxPrecedence :: Int Source

Максимальный разрешённый приоритет оператора для Fixity конструктора (ответ: 9)

Выражения

data Exp Source

Конструкторы

VarE Имя
{ x }
ConE Имя
data T1 = C1 t1 t2; p = {C1} e1 e2
LitE Лит
{ 5 or c}
AppE Выражение Выражение
{ f x }
InfixE (Возможно Выражение) Выражение (Возможно Выражение)
{x + y} or {(x+)} or {(+ x)} or {(+)}
UInfixE Выражение Выражение Выражение
{x + y}

См. Language.Haskell.TH.Syntax

ParensE Выражение
{ (e) }

См. Language.Haskell.TH.Syntax

LamE [Шаблон] Выражение
{  p1 p2 -> e }
LamCaseE [Сопоставление]
{ case m1; m2 }
TupE [Выражение]
{ (e1,e2) }
UnboxedTupE [Выражение]
{ () }
CondE Выражение Выражение Выражение
{ if e1 then e2 else e3 }
MultiIfE [(Условие, Выражение)]
{ if | g1 -> e1 | g2 -> e2 }
LetE [Декларация] Выражение
{ let x=e1;   y=e2 in e3 }
CaseE Выражение [Сопоставление]
{ case e of m1; m2 }
DoE [Утверждение]
{ do { p <- e1; e2 }  }
CompE [Утверждение]
{ [ (x,y) | x <- xs, y <- ys ] }

Выражение результата генерации — последнее из Stmt и должно быть NoBindS.

Например, перевод:

[ f x | x <- xs ]
CompE [BindS (VarP x) (VarE xs), NoBindS (AppE (VarE f) (VarE x))]
ArithSeqE Диапазон
{ [ 1 ,2 .. 10 ] }
ListE [Выражение]
{ [1,2,3] }
SigE Выражение Тип
{ e :: t }
RecConE Имя [ПолеВыражение]
{ T { x = y, z = w } }
RecUpdE Выражение [ПолеВыражение]
{ (f x) { z = w } }
StaticE Выражение
{ static e }

Примеры

Eq Выражение
Данные Выражение
Ord Выражение
Show Выражение
Generic Выражение
Ppr Выражение
type Rep Выражение

data Сопоставление Источник

Конструкторы

Match Шаблон Тело [Декларация]
case e of { pat -> body where decs }

Примеры

Eq Сопоставление
Данные Сопоставление
Ord Сопоставление
Show Сопоставление
Generic Сопоставление
Ppr Сопоставление
type Rep Сопоставление

data Тело Источник

Конструкторы

GuardedB [(Условие, Выражение)]
f p { | e1 = e2
      | e3 = e4 }
 where ds
NormalB Выражение
f p { = e } where ds

Примеры

Eq Тело
Данные Тело
Ord Тело
Show Тело
Generic Тело
type Rep Тело

data Условие Источник

Конструкторы

NormalG Выражение
f x { | odd x } = x
PatG [Утверждение]
f x { | Just y <- x, Just z <- y } = z

Примеры использования

Eq Guard
Data Guard
Ord Guard
Show Guard
Generic Guard
type Rep Guard

data Оператор Источник

Конструкторы

BindS Pat Выражение
LetS [Dec]
NoBindS Выражение
ParS [[Оператор]]

Примеры использования

Eq Оператор
Data Оператор
Ord Оператор
Show Оператор
Generic Оператор
Ppr Оператор
type Rep Оператор

data Диапазон Источник

Конструкторы

FromR Выражение
FromThenR Выражение Выражение
FromToR Выражение Выражение
FromThenToR Выражение Выражение Выражение

Примеры использования

Eq Диапазон
Data Диапазон
Ord Диапазон
Show Диапазон
Generic Диапазон
Ppr Диапазон
type Rep Диапазон

data Литерал Источник

Конструкторы

CharL Символ
StringL Строка
IntegerL Целое число

Используется для перегруженных и неперегруженных литералов. В данный момент нет хорошего способа представить неперегруженные литералы. Возможно, это не важно?

RationalL Рациональное число
IntPrimL Целое число
WordPrimL Целое число
FloatPrimL Рациональное число
DoublePrimL Рациональное число
StringPrimL [Word8]

Примитивная строка в стиле C, тип Addr#

Примеры использования

Eq Литерал
Data Литерал
Ord Литерал
Show Литерал
Generic Литерал
Ppr Литерал
type Rep Литерал

Шаблоны

data Шаблон Источник

Шаблон в Haskell, указанный в {}

Конструкторы

LitP Lit
{ 5 or c }
VarP Name
{ x }
TupP [Pat]
{ (p1,p2) }
UnboxedTupP [Pat]
{ () }
ConP Name [Pat]
data T1 = C1 t1 t2; {C1 p1 p1} = e
InfixP Pat Name Pat
foo ({x :+ y}) = e
UInfixP Pat Name Pat
foo ({x :+ y}) = e

См. Language.Haskell.TH.Syntax

ParensP Pat
{(p)}

См. Language.Haskell.TH.Syntax

TildeP Pat
{ ~p }
BangP Pat
{ !p }
AsP Name Pat
{ x @ p }
WildP
{ _ }
RecP Name [FieldPat]
f (Pt { pointx = x }) = g x
ListP [Pat]
{ [1,2,3] }
SigP Pat Type
{ p :: t }
ViewP Exp Pat
{ e -> p }

Примеры

Eq Pat
Data Pat
Ord Pat
Show Pat
Generic Pat
Ppr Pat
type Rep Pat

type FieldExp = (Name, Exp) Источник

type FieldPat = (Name, Pat) Источник

Типы

data Type Источник

Конструкторы

ForallT [TyVarBndr] Cxt Type
forall <vars>. <ctxt> -> <type>
AppT Type Type
T a b
SigT Type Kind
t :: k
VarT Name
a
ConT Name
T
PromotedT Name
'T
TupleT Int
(,), (,,), etc.
UnboxedTupleT Int
(), (), etc.
ArrowT
->
EqualityT
~
ListT
[]
PromotedTupleT Int
'(), '(,), '(,,), etc.
PromotedNilT
'[]
PromotedConsT
(':)
StarT
*
ConstraintT
Constraint
LitT TyLit
0,1,2, etc.

Примеры

Eq Type
Data Type
Ord Type
Show Type
Generic Type
Ppr Type
type Rep Type

data TyVarBndr Источник

Конструкторы

PlainTV Name
a
KindedTV Name Kind
(a :: k)

Примеры реализации

Eq TyVarBndr
Data TyVarBndr
Ord TyVarBndr
Show TyVarBndr
Generic TyVarBndr
Ppr TyVarBndr
type Rep TyVarBndr

data TyLit Source

Конструкторы

NumTyLit Integer
2
StrTyLit String
Hello

Примеры реализации

Eq TyLit
Data TyLit
Ord TyLit
Show TyLit
Generic TyLit
Ppr TyLit
type Rep TyLit

type Kind = Type Source

Для избежания дублирования между типами и видами, они определены одинаково. Естественно, у вас никогда не будет тип являться StarT, и у вас никогда не будет вид являться SigT, но многие другие конструкторы общие. Обратите внимание, что вид Bool обозначается ConT, а не PromotedT. Аналогично, кортежи видов создаются с помощью TupleT, а не PromotedTupleT.

type Cxt Source

Аргументы

= [Pred]
(Eq a, Ord b)

type Pred = Type Source

С появлением ConstraintKinds, ограничения — это всего лишь типы. Ограничения равенства используют конструктор EqualityT. Ограничения также могут быть кортежами других ограничений.

data Role Source

Аннотации роли

Конструкторы

NominalR
nominal
RepresentationalR
representational
PhantomR
phantom
InferR
_

Примеры реализации

Eq Role
Data Role
Ord Role
Show Role
Generic Role
Ppr Role
type Rep Role

Функции библиотеки

Аббревиатуры

type InfoQ = Q Info Source

type ExpQ = Q Exp Source

type DecQ = Q Dec Source

type DecsQ = Q [Dec] Source

type ConQ = Q Con Source

type TypeQ = Q Type Source

type TyLitQ = Q TyLit Source

type CxtQ = Q Cxt Source

type PredQ = Q Pred Source

type MatchQ = Q Match Source

type ClauseQ = Q Clause Source

type BodyQ = Q Body Source

type GuardQ = Q Guard Source

type StmtQ = Q Stmt Source

type RangeQ = Q Range Source

type StrictTypeQ = Q StrictType Source

type VarStrictTypeQ = Q VarStrictType Source

type PatQ = Q Паттерн Source

type FieldPatQ = Q FieldPat Source

type RuleBndrQ = Q RuleBndr Source

type TySynEqnQ = Q TySynEqn Source

Конструкторы, поднятые до Q

Литералы

intPrimL :: Целое -> Лит Source

wordPrimL :: Целое -> Лит Source

floatPrimL :: Рациональное -> Лит Source

doublePrimL :: Рациональное -> Лит Source

integerL :: Целое -> Лит Source

rationalL :: Рациональное -> Лит Source

charL :: Символ -> Лит Source

stringL :: Строка -> Лит Source

stringPrimL :: [Word8] -> Лит Source

Паттерны

litP :: Лит -> PatQ Source

varP :: Имя -> PatQ Source

tupP :: [PatQ] -> PatQ Source

conP :: Имя -> [PatQ] -> PatQ Source

uInfixP :: PatQ -> Имя -> PatQ -> PatQ Source

parensP :: PatQ -> PatQ Source

infixP :: PatQ -> Имя -> PatQ -> PatQ Source

tildeP :: PatQ -> PatQ Source

bangP :: PatQ -> PatQ Source

asP :: Имя -> PatQ -> PatQ Source

wildP :: PatQ Source

recP :: Имя -> [FieldPatQ] -> PatQ Source

listP :: [PatQ] -> PatQ Source

sigP :: PatQ -> TypeQ -> PatQ Source

viewP :: ExpQ -> PatQ -> PatQ Source

fieldPat :: Имя -> PatQ -> FieldPatQ Source

Защитные условия для паттернов

normalB :: ExpQ -> BodyQ Source

guardedB :: [Q (Защита, Выражение)] -> BodyQ Source

normalG :: ExpQ -> GuardQ Source

normalGE :: ExpQ -> ExpQ -> Q (Guard, Exp) Source

patG :: [StmtQ] -> GuardQ Source

patGE :: [StmtQ] -> ExpQ -> Q (Guard, Exp) Source

match :: PatQ -> BodyQ -> [DecQ] -> MatchQ Source

Использование с caseE

clause :: [PatQ] -> BodyQ -> [DecQ] -> ClauseQ Source

Использование с funD

Выражения

dyn :: String -> ExpQ Source

Динамическое связывание переменной (негигиенично)

global :: Name -> ExpQ Source

Устарело: Используйте varE вместо этого

varE :: Name -> ExpQ Source

conE :: Name -> ExpQ Source

litE :: Lit -> ExpQ Source

appE :: ExpQ -> ExpQ -> ExpQ Source

uInfixE :: ExpQ -> ExpQ -> ExpQ -> ExpQ Source

parensE :: ExpQ -> ExpQ Source

staticE :: ExpQ -> ExpQ Source

staticE x = [| static x |]

infixE :: Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ Source

infixApp :: ExpQ -> ExpQ -> ExpQ -> ExpQ Source

sectionL :: ExpQ -> ExpQ -> ExpQ Source

sectionR :: ExpQ -> ExpQ -> ExpQ Source

lamE :: [PatQ] -> ExpQ -> ExpQ Source

lam1E :: PatQ -> ExpQ -> ExpQ Source

Одноаргументная лямбда

lamCaseE :: [MatchQ] -> ExpQ Source

tupE :: [ExpQ] -> ExpQ Source

condE :: ExpQ -> ExpQ -> ExpQ -> ExpQ Source

multiIfE :: [Q (Guard, Exp)] -> ExpQ Source

letE :: [DecQ] -> ExpQ -> ExpQ Source

caseE :: ExpQ -> [MatchQ] -> ExpQ Source

appsE :: [ExpQ] -> ExpQ Source

listE :: [ExpQ] -> ExpQ Source

sigE :: ExpQ -> TypeQ -> ExpQ Source

recConE :: Name -> [Q (Name, Exp)] -> ExpQ Source

recUpdE :: ExpQ -> [Q (Имя, Exp)] -> ExpQ Источник

stringE :: Строка -> ExpQ Источник

fieldExp :: Имя -> ExpQ -> Q (Имя, Exp) Источник

Диапазоны

fromE :: ExpQ -> ExpQ Источник

fromThenE :: ExpQ -> ExpQ -> ExpQ Источник

fromToE :: ExpQ -> ExpQ -> ExpQ Источник

fromThenToE :: ExpQ -> ExpQ -> ExpQ -> ExpQ Источник

Диапазоны с большей косвенностью

arithSeqE :: RangeQ -> ExpQ Источник

fromR :: ExpQ -> RangeQ Источник

fromThenR :: ExpQ -> ExpQ -> RangeQ Источник

fromToR :: ExpQ -> ExpQ -> RangeQ Источник

fromThenToR :: ExpQ -> ExpQ -> ExpQ -> RangeQ Источник

Операторы

doE :: [StmtQ] -> ExpQ Источник

compE :: [StmtQ] -> ExpQ Источник

bindS :: PatQ -> ExpQ -> StmtQ Источник

letS :: [DecQ] -> StmtQ Источник

noBindS :: ExpQ -> StmtQ Источник

parS :: [[StmtQ]] -> StmtQ Источник

Типы

forallT :: [TyVarBndr] -> CxtQ -> TypeQ -> TypeQ Источник

varT :: Имя -> TypeQ Источник

conT :: Имя -> TypeQ Источник

appT :: TypeQ -> TypeQ -> TypeQ Источник

arrowT :: TypeQ Источник

equalityT :: TypeQ Источник

listT :: TypeQ Источник

tupleT :: Целое -> TypeQ Источник

sigT :: TypeQ -> Kind -> TypeQ Источник

litT :: TyLitQ -> TypeQ Источник

promotedT :: Имя -> TypeQ Источник

promotedTupleT :: Целое -> TypeQ Источник

promotedNilT :: TypeQ Источник

promotedConsT :: TypeQ Источник

Литералы типов

numTyLit :: Целое -> TyLitQ Источник

END_OF_DOCUMENT_MARKER

strTyLit :: Строка -> TyLitQ Источник

Строгость

isStrict :: Q Strict Источник

notStrict :: Q Strict Источник

strictType :: Q Strict -> TypeQ -> StrictTypeQ Источник

varStrictType :: Имя -> StrictTypeQ -> VarStrictTypeQ Источник

Контексты классов

cxt :: [PredQ] -> CxtQ Источник

classP :: Имя -> [Q Тип] -> Q Pred Источник

Устаревшее: Начиная с template-haskell-2.10, предикаты ограничений (Pred) являются просто типами (Type), в соответствии с ConstraintKinds. Пожалуйста, используйте conT и appT.

equalP :: TypeQ -> TypeQ -> PredQ Источник

Устаревшее: Начиная с template-haskell-2.10, предикаты ограничений (Pred) являются просто типами (Type), в соответствии с ConstraintKinds. Пожалуйста, обратитесь к equalityT.

normalC :: Имя -> [StrictTypeQ] -> ConQ Источник

recC :: Имя -> [VarStrictTypeQ] -> ConQ Источник

infixC :: Q (Strict, Тип) -> Имя -> Q (Strict, Тип) -> ConQ Источник

forallC :: [TyVarBndr] -> CxtQ -> ConQ -> ConQ Источник

Виды

varK :: Имя -> Вид Источник

conK :: Имя -> Вид Источник

tupleK :: Целое -> Вид Источник

arrowK :: Вид Источник

listK :: Вид Источник

appK :: Вид -> Вид -> Вид Источник

starK :: Вид Источник

constraintK :: Вид Источник

Роли

nominalR :: Роль Источник

representationalR :: Роль Источник

phantomR :: Роль Источник

inferR :: Роль Источник

Декларации верхнего уровня

Данные

valD :: PatQ -> BodyQ -> [DecQ] -> DecQ Источник

funD :: Имя -> [ClauseQ] -> DecQ Источник

tySynD :: Имя -> [TyVarBndr] -> TypeQ -> DecQ Источник

dataD :: CxtQ -> Имя -> [TyVarBndr] -> [ConQ] -> [Имя] -> DecQ Источник

newtypeD :: CxtQ -> Имя -> [TyVarBndr] -> ConQ -> [Имя] -> DecQ Источник

Класс

classD :: CxtQ -> Name -> [TyVarBndr] -> [FunDep] -> [DecQ] -> DecQ Источник

instanceD :: CxtQ -> TypeQ -> [DecQ] -> DecQ Источник

sigD :: Name -> TypeQ -> DecQ Источник

standaloneDerivD :: CxtQ -> TypeQ -> DecQ Источник

defaultSigD :: Name -> TypeQ -> DecQ Источник

Аннотации ролей

roleAnnotD :: Name -> [Role] -> DecQ Источник

Семейство типов/семейство данных

familyNoKindD :: FamFlavour -> Name -> [TyVarBndr] -> DecQ Источник

familyKindD :: FamFlavour -> Name -> [TyVarBndr] -> Kind -> DecQ Источник

dataInstD :: CxtQ -> Name -> [TypeQ] -> [ConQ] -> [Name] -> DecQ Источник

closedTypeFamilyNoKindD :: Name -> [TyVarBndr] -> [TySynEqnQ] -> DecQ Источник

closedTypeFamilyKindD :: Name -> [TyVarBndr] -> Kind -> [TySynEqnQ] -> DecQ Источник

newtypeInstD :: CxtQ -> Name -> [TypeQ] -> ConQ -> [Name] -> DecQ Источник

tySynInstD :: Name -> TySynEqnQ -> DecQ Источник

typeFam :: FamFlavour Источник

dataFam :: FamFlavour Источник

tySynEqn :: [TypeQ] -> TypeQ -> TySynEqnQ Источник

Интерфейс внешней функции (FFI)

cCall :: Callconv Источник

stdCall :: Callconv Источник

cApi :: Callconv Источник

prim :: Callconv Источник

javaScript :: Callconv Источник

unsafe :: Safety Источник

safe :: Safety Источник

forImpD :: Callconv -> Safety -> String -> Name -> TypeQ -> DecQ Источник

Директивы

ruleVar :: Name -> RuleBndrQ Источник

typedRuleVar :: Name -> TypeQ -> RuleBndrQ Источник

pragInlD :: Name -> Inline -> RuleMatch -> Phases -> DecQ Источник

pragSpecD :: Name -> TypeQ -> Phases -> DecQ Источник

pragSpecInlD :: Имя -> ТипQ -> Вставка -> Фазы -> DecQ Исходный код

pragSpecInstD :: ТипQ -> DecQ Исходный код

pragRuleD :: Строка -> [RuleBndrQ] -> ExpQ -> ExpQ -> Фазы -> DecQ Исходный код

pragAnnD :: AnnTarget -> ExpQ -> DecQ Исходный код

pragLineD :: Целое -> Строка -> DecQ Исходный код

Форматировщик

class Ppr a where Исходный код

Минимальное полное определение

ppr

Методы

ppr :: a -> Документ Исходный код

ppr_list :: [a] -> Документ Исходный код

Примеры

Ppr Выражение
Ppr Сопоставление
Ppr Определение
Ppr Шаблон
Ppr Тип
Ppr Декларация
Ppr Имя
Ppr Зависимость
Ppr Связанная переменная типа
Ppr Роль
Ppr Литерал типа
Ppr Конструктор
Ppr Связанная переменная правила
Ppr Фазы
Ppr Сопоставление правила
Ppr Вставка
Ppr Директива
Ppr Внешний
Ppr FamFlavour
Ppr Диапазон
Ppr Предложение
Ppr Литерал
Ppr Информация о модуле
Ppr Информация
Ppr Позиция
Ppr Модуль
Ppr a => Ppr [a]

pprint :: Ppr a => a -> Строка Исходный код

pprExp :: Уровень приоритета -> Выражение -> Документ Исходный код

pprLit :: Уровень приоритета -> Литерал -> Документ Исходный код

pprPat :: Уровень приоритета -> Шаблон -> Документ Исходный код

pprParendType :: Тип -> Документ Исходный код

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH.html

Spec-Zone.ru

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