Language.Haskell.TH
| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Содержание
Описание
Публичный интерфейс Template Haskell
Для другой документации, обратитесь к: http://www.haskell.org/haskellwiki/Template_Haskell
Моноид и его операции
data Q a Исходный код
runQ :: Quasi m => Q a -> m a Исходный код
Администрирование: ошибки, местоположения и IO
reportError :: String -> Q () Исходный код
Сообщите пользователю об ошибке, но позвольте текущему вычислению продолжить работу. Чтобы прервать вычисление, используйте fail.
reportWarning :: String -> Q () Исходный код
Сообщите пользователю об предупреждении и продолжите работу.
report :: Bool -> String -> Q () Исходный код
Устарело: используйте reportError или reportWarning вместо этого.
Сообщите об ошибке (True) или предупреждении (False), но продолжайте; используйте fail для остановки.
Восстановиться от ошибок, поднятых reportError или fail.
location :: Q Loc Исходный код
Местоположение, в котором выполняется данное вычисление.
data Loc Исходный код
Конструкторы
| Loc | |
Поля
| |
Экземпляры
runIO :: IO a -> Q a Исходный код
Функция runIO позволяет запускать вычисление I/O в моноиде Q. Обратите внимание: вам гарантируется порядок вызовов runIO внутри одного вычисления Q, но не порядок, в котором выполняются вставки.
Примечание: по разным причинам, ручки stdout и stderr не обязательно сбрасываются, когда компилятор завершает работу, поэтому вам нужно сбросить их самостоятельно.
Запрос к компилятору
Reify
reify :: Name -> Q Info Исходный код
thisModule :: Q Модуль Исходный код
Возвращает Модуль в месте вставки. Может быть использован в качестве входного параметра для reifyModule.
data Info Исходный код
Конструкторы
| ClassI Dec [InstanceDec] | Класс с списком его видимых экземпляров. |
| ClassOpI Имя Тип РодительскоеИмя Фиксированность | Метод класса. |
| TyConI Dec | «Простой» конструктор типа. «Более сложные» конструкторы типов возвращаются с использованием |
| FamilyI Dec [InstanceDec] | Семейство типов или данных с списком его видимых экземпляров. Закрытое семейство типов возвращается с 0 экземплярами. |
| PrimTyConI Имя Арность Неподнятый | «Примитивный» конструктор типа, который нельзя выразить с помощью |
| DataConI Имя Тип РодительскоеИмя Фиксированность | Конструктор данных. |
| VarI Имя Тип (МожетБыть Dec) Фиксированность |
Переменная «значения» (в отличие от переменной типа, см. Поле |
| TyVarI Имя Тип |
Переменная типа. Поле |
data ModuleInfo Исходный код
Получено из reifyModule в Q монаде.
Конструкторы
| 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 Имя |
Экземпляры
Типизированные выражения
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, не могут.
data ПространствоИмен Исходный код
Экземпляры
Создание имен
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[VarPnm1] (LamE [VarP nm2] (VarEnm1))) )
сгенерирует вставку
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
Конструктор данных нераспакованных кортежей
Алгебраические типы данных
Предпочтительнее использовать строчные версии (операторы синтаксиса) этих конструкторов, поскольку они лучше сочетаются с цитатами ([| |]) и вставками ($( ... ))
Объявления
Конструкторы
| 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 } |
Конструкторы
| 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] |
Примеры использования
Примеры использования
Конструкторы
| CCall | |
| StdCall | |
| CApi | |
| Prim | |
| JavaScript |
Примеры использования
data Безопасность Source
Конструкторы
| Unsafe | |
| Safe | |
| Interruptible |
Примеры использования
Примеры использования
Примеры использования
Примеры использования
Конструкторы
| AllPhases | |
| FromPhase Int | |
| BeforePhase Int |
Примеры использования
Конструкторы
| RuleVar Имя | |
| TypedRuleVar Имя Тип |
Примеры использования
data Целевая аннотация Источник
Конструкторы
| Аннотация модуля | |
| Аннотация типа Имя | |
| Аннотация значения Имя |
Примеры использования
data FamFlavour Source
Примеры
Одно уравнение экземпляра семейства типов или закрытого семейства типов. Аргументы — это шаблоны типов левой части и результат правой части.
Конструкторы
| Fixity Int FixityDirection |
data НаправлениеФиксирования Source
Примеры
defaultFixity :: Fixity Source
Значение по умолчанию для фиксированности: infixl 9
Максимальный разрешённый приоритет оператора для Fixity конструктора (ответ: 9)
Выражения
Конструкторы
| VarE Имя | { x } |
| ConE Имя | data T1 = C1 t1 t2; p = {C1} e1 e2 |
| LitE Лит | { 5 or |
| AppE Выражение Выражение | { f x } |
| InfixE (Возможно Выражение) Выражение (Возможно Выражение) | {x + y} or {(x+)} or {(+ x)} or {(+)} |
| UInfixE Выражение Выражение Выражение |
{x + y}
|
| ParensE Выражение |
{ (e) }
|
| 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 ] }
Выражение результата генерации — последнее из Например, перевод: [ 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 } |
Примеры
data Сопоставление Источник
Конструкторы
| Match Шаблон Тело [Декларация] | case e of { pat -> body where decs } |
Примеры
Конструкторы
| GuardedB [(Условие, Выражение)] | f p { | e1 = e2
| e3 = e4 }
where ds |
| NormalB Выражение | f p { = e } where ds |
Конструкторы
| NormalG Выражение | f x { | odd x } = x |
| PatG [Утверждение] | f x { | Just y <- x, Just z <- y } = z |
Примеры использования
Конструкторы
| FromR Выражение | |
| FromThenR Выражение Выражение | |
| FromToR Выражение Выражение | |
| FromThenToR Выражение Выражение Выражение |
Примеры использования
Конструкторы
| CharL Символ | |
| StringL Строка | |
| IntegerL Целое число | Используется для перегруженных и неперегруженных литералов. В данный момент нет хорошего способа представить неперегруженные литералы. Возможно, это не важно? |
| RationalL Рациональное число | |
| IntPrimL Целое число | |
| WordPrimL Целое число | |
| FloatPrimL Рациональное число | |
| DoublePrimL Рациональное число | |
| StringPrimL [Word8] | Примитивная строка в стиле C, тип Addr# |
Примеры использования
Шаблоны
Шаблон в Haskell, указанный в {}
Конструкторы
| LitP Lit | { 5 or |
| 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
|
| ParensP Pat |
{(p)}
|
| 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 } |
type FieldExp = (Name, Exp) Источник
type FieldPat = (Name, Pat) Источник
Типы
Конструкторы
| 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. |
Примеры реализации
Для избежания дублирования между типами и видами, они определены одинаково. Естественно, у вас никогда не будет тип являться StarT, и у вас никогда не будет вид являться SigT, но многие другие конструкторы общие. Обратите внимание, что вид Bool обозначается ConT, а не PromotedT. Аналогично, кортежи видов создаются с помощью TupleT, а не PromotedTupleT.
Аргументы
| = [Pred] | (Eq a, Ord b) |
С появлением ConstraintKinds, ограничения — это всего лишь типы. Ограничения равенства используют конструктор EqualityT. Ограничения также могут быть кортежами других ограничений.
Аннотации роли
Конструкторы
| NominalR | nominal |
| RepresentationalR | representational |
| PhantomR | phantom |
| InferR | _ |
Функции библиотеки
Аббревиатуры
type StrictTypeQ = Q StrictType Source
type VarStrictTypeQ = Q VarStrictType 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
stringL :: Строка -> Лит Source
stringPrimL :: [Word8] -> Лит Source
Паттерны
conP :: Имя -> [PatQ] -> PatQ Source
uInfixP :: PatQ -> Имя -> PatQ -> PatQ Source
parensP :: PatQ -> PatQ Source
infixP :: PatQ -> Имя -> PatQ -> PatQ Source
asP :: Имя -> PatQ -> PatQ Source
recP :: Имя -> [FieldPatQ] -> PatQ Source
listP :: [PatQ] -> PatQ Source
sigP :: PatQ -> TypeQ -> PatQ Source
viewP :: ExpQ -> PatQ -> PatQ Source
fieldPat :: Имя -> PatQ -> FieldPatQ 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
Выражения
Динамическое связывание переменной (негигиенично)
Устарело: Используйте varE вместо этого
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
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
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 Источник
appT :: TypeQ -> TypeQ -> TypeQ Источник
tupleT :: Целое -> TypeQ Источник
sigT :: TypeQ -> Kind -> TypeQ Источник
litT :: TyLitQ -> TypeQ Источник
promotedT :: Имя -> TypeQ Источник
promotedTupleT :: Целое -> TypeQ Источник
promotedNilT :: TypeQ Источник
promotedConsT :: TypeQ Источник
Литералы типов
strTyLit :: Строка -> TyLitQ Источник
Строгость
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 Источник
Виды
tupleK :: Целое -> Вид Источник
appK :: Вид -> Вид -> Вид Источник
Роли
representationalR :: Роль Источник
Декларации верхнего уровня
Данные
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)
javaScript :: Callconv Источник
forImpD :: Callconv -> Safety -> String -> Name -> TypeQ -> DecQ Источник
Директивы
ruleVar :: Name -> RuleBndrQ Источник
typedRuleVar :: Name -> TypeQ -> RuleBndrQ Источник
pragInlD :: Name -> Inline -> RuleMatch -> Phases -> DecQ Источник
pragSpecInlD :: Имя -> ТипQ -> Вставка -> Фазы -> DecQ Исходный код
pragSpecInstD :: ТипQ -> DecQ Исходный код
pragRuleD :: Строка -> [RuleBndrQ] -> ExpQ -> ExpQ -> Фазы -> DecQ Исходный код
pragAnnD :: AnnTarget -> ExpQ -> DecQ Исходный код
pragLineD :: Целое -> Строка -> DecQ Исходный код
Форматировщик
class Ppr a where Исходный код
Минимальное полное определение
Примеры
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