h& 6       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                                                                                                      "(c) The University of Glasgow 2015/BSD-style (see the file libraries/base/LICENSE)libraries@haskell.org experimentalportableSafeq Safe "(c) The University of Glasgow 2003/BSD-style (see the file libraries/base/LICENSE)libraries@haskell.org experimentalportable Trustworthy ()/057:;rtemplate-haskellTurn a value into a Template Haskell expression, suitable for use in a splice.template-haskell0Generate a fresh name, which cannot be captured.For example, this: .f = $(do nm1 <- newName "x" let nm2 =  "x" return ( [ nm1] (LamE [VarP nm2] ( nm1))) )will produce the splice f = \x0 -> \x -> x0In particular, the occurrence VarE nm1 refers to the binding VarP nm1', and is not captured by the binding VarP nm2.Although names generated by newName cannot  be captured , they can capture other names. For example, this: g = $(do nm1 <- newName "x" let nm2 = mkName "x" return (LamE [VarP nm2] (LamE [VarP nm1] (VarE nm2))) )will produce the splice g = \x -> \x0 -> x0since the occurrence VarE nm2+ is captured by the innermost binding of x , namely VarP nm1.template-haskellGenerate a capturable name. Occurrences of such names will be resolved according to the Haskell scoping rules at the occurrence site. For example: =f = [| pi + $(varE (mkName "pi")) |] ... g = let pi = 3 in $fIn this case, g is desugared to g = Prelude.pi + 3 Note that mkName" may be used with qualified names: mkName "Prelude.pi" See also   for a useful combinator. The above example could be rewritten using   as f = [| pi + $(dyn "pi") |]template-haskellOnly used internally template-haskell.Underlying untyped Template Haskell expression template-haskellExtract the untyped representation from the typed representation template-haskellTurn a value into a Template Haskell typed expression, suitable for use in a typed splice. template-haskellUnsafely convert an untyped code representation into a typed code representation.template-haskellA  instance can have any of its values turned into a Template Haskell expression. This is needed when a value used within a Template Haskell quotation is bound outside the Oxford brackets ( [| ... |] or  [|| ... ||]*) but not at the top level. As an example: 2add1 :: Int -> Q (TExp Int) add1 x = [|| x + 1 ||]2Template Haskell has no way of knowing what value x: will take on at splice-time, so it requires the type of x to be an instance of .A  instance must satisfy  $(lift x) D x and $$(liftTyped x) D x for all x, where $(...) and $$(...) are Template Haskell splices. It is additionally expected that  x D  (  x).6 instances can be derived automatically by use of the  -XDeriveLift GHC language extension: {-# LANGUAGE DeriveLift #-} module Foo where import Language.Haskell.TH.Syntax data Bar a = Bar1 a (Bar a) | Bar2 String deriving LiftLevity-polymorphic since template-haskell-2.16.0.0.template-haskellThe  class implements the minimal interface which is necessary for desugaring quotations.The Monad m superclass is needed to stitch together the different AST fragments. is used when desugaring binding structures such as lambdas to generate fresh names.Therefore the type of an untyped quotation in GHC is `Quote m => m Exp`For many years the type of a quotation was fixed to be `Q Exp` but by more precisely specifying the minimal interface it enables the  to be extracted purely from the quotation without interacting with .template-haskellPattern in Haskell given in {}template-haskellA single data constructor.The constructors for  can roughly be divided up into two categories: those for constructors with "vanilla" syntax (, , and 0), and those for constructors with GADT syntax ( and ). The  constructor, which quantifies additional type variables and class contexts, can surround either variety of constructor. However, the type variables that it quantifies are different depending on what constructor syntax is used:If a : surrounds a constructor with vanilla syntax, then the  will only quantify  existential type variables. For example: % data Foo a = forall b. MkFoo a b In MkFoo,  will quantify b , but not a.If a 7 surrounds a constructor with GADT syntax, then the  will quantify all8 type variables used in the constructor. For example: > data Bar a b where MkBar :: (a ~ b) => c -> MkBar a b In MkBar,  will quantify a, b, and c.template-haskell7An abstract type representing names in the syntax tree.s can be constructed in several ways, which come with different name-capture guarantees (see &Language.Haskell.TH.Syntax#namecapture% for an explanation of name capture):the built-in syntax 'f and ''T4 can be used to construct names, The expression 'f gives a Name which refers to the value f currently in scope, and ''T gives a Name which refers to the type T7 currently in scope. These names can never be captured. and  are similar to 'f and ''T respectively, but the Names are looked up at the point where the current splice is being run. These names can never be captured. monadically generates a new name, which can never be captured. generates a capturable name.Names constructed using newName and mkName" may be used in bindings (such as  let x = ... or x -> ...), but names constructed using lookupValueName, lookupTypeName, 'f, ''T may not.template-haskellSince the advent of ConstraintKinds, constraints are really just types. Equality constraints use the  constructor. Constraints may also be tuples of other constraints.template-haskellOne equation of a type family instance or closed type family. The arguments are the left-hand-side type and the right-hand-side result.3For instance, if you had the following type family: type family Foo (a :: k) :: k where forall k (a :: k). Foo @k a = a The  Foo @k a = a* equation would be represented as follows:  (  [ k,  a ( k)]) ( ( ( ''Foo) ( k)) ( a)) ( a) template-haskellInjectivity annotationtemplate-haskellTo avoid duplication between kinds and types, they are defined to be the same. Naturally, you would never have a type be % and you would never have a kind be , but many of the other constructors are shared. Note that the kind Bool is denoted with , not '. Similarly, tuple kinds are made with , not .template-haskell&Varieties of allowed instance overlap.template-haskell A single deriving! clause at the end of a datatype.template-haskell>=) which allows effectful computations to be injected into code generation.template-haskellVariant of (>>) which allows effectful computations to be injected into code generation.template-haskell converts a value to a  representation of the same value, in the SYB style. It is generalized to take a function override type-specific cases; see # for a more commonly used variant.template-haskell converts a value to a  representation of the same value, in the SYB style. It takes a function to handle type-specific cases, alternatively, pass  const Nothing to get default behavior.template-haskell is an internal utility function for constructing generic conversion functions from types with   instances to various quasi-quoting representations. See the source of  and  for two example usages: mkCon, mkLit and appQ are overloadable to account for different syntax for expressions and patterns; antiQ allows you to override type-specific cases, a common usage is just  const Nothing#, which results in no overloading.template-haskellDefault fixity: infixl 9template-haskell%List all enabled language extensions.template-haskellRetreives the Haddock documentation at the specified location, if one exists. It can be used to read documentation on things defined outside of the current module, provided that those modules were compiled with the -haddock flag.template-haskellGet state from the  monad. Note that the state is local to the Haskell module in which the Template Haskell expression is executed.template-haskellModify the ambient monad used during code generation. For example, you can use  to handle a state effect:  handleState :: Code (StateT Int Q) a -> Code Q a handleState = hoistCode (flip runState 0) template-haskellDetermine whether the given language extension is enabled in the  monad.template-haskell%Is the list of instances returned by  nonempty?template-haskell7A useful combinator for embedding monadic actions into   myCode :: ... => Code m a myCode = joinCode $ do x <- someSideEffect return (makeCodeWith x) template-haskell4Lift a monadic action producing code into the typed  representationtemplate-haskell is a variant of  in the - type class which works for any type with a   instance.template-haskell2The location at which this computation is spliced.template-haskellLook up the given name in the (type namespace of the) current splice's scope. See %Language.Haskell.TH.Syntax#namelookup for more details.template-haskellLook up the given name in the (value namespace of the) current splice's scope. See %Language.Haskell.TH.Syntax#namelookup for more details.template-haskell(Highest allowed operator precedence for  constructor (answer: 9)template-haskell4Used for 'x etc, but not available to the programmertemplate-haskellOnly used internallytemplate-haskell#The name without its module prefix.ExamplesnameBase ''Data.Either.Either"Either"nameBase (mkName "foo")"foo"nameBase (mkName "Module.foo")"foo"template-haskell&Module prefix of a name, if it exists.ExamplesnameModule ''Data.Either.EitherJust "Data.Either"nameModule (mkName "foo")Nothing nameModule (mkName "Module.foo") Just "Module"template-haskellA name's package, if it exists.Examples namePackage ''Data.Either.Either Just "base"namePackage (mkName "foo")Nothing!namePackage (mkName "Module.foo")Nothingtemplate-haskellReturns whether a name represents an occurrence of a top-level variable (), data constructor (%), type constructor, or type class (#). If we can't be sure, it returns  .ExamplesnameSpace 'Prelude.id Just VarNamenameSpace (mkName "id")2Nothing -- only works for top-level variable namesnameSpace 'Data.Maybe.Just Just DataNamenameSpace ''Data.Maybe.MaybeJust TcClsNamenameSpace ''Data.Ord.OrdJust TcClsNametemplate-haskellAdd Haddock documentation to the specified location. This will overwrite any documentation at the location if it already exists. This will reify the specified name, so it must be in scope when you call it. If you want to add documentation to something that you are currently splicing, you can use  e.g. do let nm = mkName "x" addModFinalizer $ putDoc (DeclDoc nm) "Hello" [d| $(varP nm) = 42 |]The helper functions  withDecDoc and  withDecsDoc$ will do this for you, as will the funD_doc and other _doc0 combinators. You most likely want to have the -haddock flag turned on when using this. Adding documentation to anything outside of the current module will cause an error.template-haskellReplace the state in the  monad. Note that the state is local to the Haskell module in which the Template Haskell expression is executed.template-haskellRecover from errors raised by  or  .template-haskell looks up information about the . Eq (a, b) regardless of whether A and B themselves implement  reifyInstances ''Show [  ( "a") ]* produces every available instance of  There is one edge case: reifyInstances ''Typeable tys9 currently always produces an empty list (no matter what tys are given).template-haskellreifyModule mod# looks up information about module mod. To look up the current module, call this function with the return value of  .template-haskell reifyRoles nm returns the list of roles associated with the parameters of the tycon nm . Fails if nm cannot be found or is not a tycon. The returned list should never contain .template-haskell reifyType nm& attempts to find the type or kind of nm. For example, reifyType 'not returns  Bool -> Bool, and reifyType ''Bool returns Type. This works even if there's no explicit signature and the type or kind is inferred.template-haskell>Report an error (True) or warning (False), but carry on; use   to stop.template-haskellReport an error to the user, but allow the current splice's computation to carry on. To abort the computation, use  .template-haskell+Report a warning to the user, and carry on.template-haskellThe 1 function lets you run an I/O computation in the  monad. Take care: you are guaranteed the ordering of calls to  within a single ? computation, but not about the order in which splices are run.Note: for various murky reasons, stdout and stderr handles are not necessarily flushed when the compiler finishes running, so you should flush them yourself.template-haskellTuple data constructortemplate-haskellTuple type constructortemplate-haskellDiscard the type annotation and produce a plain Template Haskell expressionLevity-polymorphic since template-haskell-2.16.0.0.template-haskellUnboxed sum data constructortemplate-haskellUnboxed sum type constructortemplate-haskellUnboxed tuple data constructortemplate-haskellUnboxed tuple type constructortemplate-haskell4Annotate the Template Haskell expression with a typeThis is unsafe because GHC cannot check for you that the expression really does have the type you claim it has.Levity-polymorphic since template-haskell-2.16.0.0.template-haskell&Annotation target for reifyAnnotationstemplate-haskellIn , arity of the type constructortemplate-haskell C { {-# UNPACK #-} !}atemplate-haskell +f p { | e1 = e2 | e3 = e4 } where dstemplate-haskell f p { = e } where dstemplate-haskell#Raw bytes embedded into the binary.Avoid using Bytes constructor directly as it is likely to change in the future. Use helpers such as mkBytes$ in Language.Haskell.TH.Lib instead.template-haskellOffset from the pointertemplate-haskellPointer to the datatemplate-haskellNumber of bytes Maybe someday: , bytesAlignement :: Word -- ^ Alignement constraint , bytesReadOnly :: Bool -- ^ Shall we embed into a read-only -- section or not , bytesInitialized :: Bool -- ^ False: only use  to allocate -- an uninitialized regiontemplate-haskell f { p1 p2 = body where decs }template-haskellUnderlying monadic valuetemplate-haskell forall a. Eq a => C [a]template-haskell C :: a -> b -> T b Inttemplate-haskell Int :+ atemplate-haskell C Int atemplate-haskell C { v :: Int, w :: a }template-haskell C :: { v :: Int } -> T b Inttemplate-haskell  { class Eq a => Ord a where ds }template-haskell 3{ type family F a b = (r :: *) | r -> a where ... }template-haskell { data Cxt x => T x = A x | B (T x) deriving (Z,W) deriving stock Eq }template-haskell+data families (may also appear in [Dec] of  and )template-haskell { data instance Cxt x => T [x] = A x | B (T x) deriving (Z,W) deriving stock Eq }template-haskell &{ default size :: Data a => a -> Int }template-haskell -{ foreign import ... } { foreign export ... }template-haskell { f p1 p2 = b where decs }template-haskell  { ?x = expr }Implicit parameter binding declaration. Can only be used in let and where clauses which consist entirely of implicit bindings.template-haskell { infix 3 foo }template-haskell { instance {-# OVERLAPS #-} Show w => Show [w] where ds }template-haskell { type TypeRep :: k -> Type }template-haskell { newtype Cxt x => T x = A (B x) deriving (Z,W Q) deriving stock Eq }template-haskell { newtype instance Cxt x => T [x] = A (B x) deriving (Z,W) deriving stock Eq }template-haskell0open type families (may also appear in [Dec] of  and )template-haskellPattern Synonymstemplate-haskell#A pattern synonym's type signature.template-haskellpragmastemplate-haskell ({ type role T nominal representational }template-haskell { length :: [a] -> Int }template-haskell 0{ deriving stock instance Ord a => Ord (Foo a) }template-haskell { type T x = (x,x) }template-haskell { type instance ... }template-haskell { p = b where decs }template-haskellUnlike  and ,  refers to the strictness that the compiler chooses for a data constructor field, which may be different from what is written in source code. See  for more information.template-haskell { deriving stock (Eq, Ord) }template-haskell -XDeriveAnyClasstemplate-haskell -XGeneralizedNewtypeDerivingtemplate-haskellA "standard" derived instancetemplate-haskell  -XDerivingViatemplate-haskellA location at which to attach Haddock documentation. Note that adding documentation to a < defined oustide of the current module will cause an error.template-haskell?At a specific argument of a function, indexed by its position.template-haskell,At a declaration, not necessarily top level.template-haskellAt a class or family instance.template-haskellAt the current module's header.template-haskell { f x }template-haskell  { f @Int }template-haskell { [ 1 ,2 .. 10 ] }template-haskell { case e of m1; m2 }template-haskell  { [ (x,y) | x <- xs, y <- ys ] }3The result expression of the comprehension is the last of the s, and should be a .E.g. translation: [ f x | x <- xs ] CompE [BindS (VarP x) (VarE xs), NoBindS (AppE (VarE f) (VarE x))]template-haskell "data T1 = C1 t1 t2; p = {C1} e1 e2template-haskell { if e1 then e2 else e3 }template-haskell{ do { p <- e1; e2 } }1 or a qualified do if the module name is presenttemplate-haskell { exp.field } ( Overloaded Record Dot )template-haskell{ ?x } ( Implicit parameter )template-haskell %{x + y} or {(x+)} or {(+ x)} or {(+)}template-haskell{ #x } ( Overloaded label )template-haskell { \case m1; m2 }template-haskell { \ p1 p2 -> e }template-haskell { let { x=e1; y=e2 } in e3 }template-haskell  { [1,2,3] }template-haskell  { 5 or 'c'}template-haskell!{ mdo { x <- e1 y; y <- e2 x; } }2 or a qualified mdo if the module name is presenttemplate-haskell { if | g1 -> e1 | g2 -> e2 }template-haskell { (e) }See  Language.Haskell.TH.Syntax#infixtemplate-haskell(.x) or (.x.y) (Record projections)template-haskell { T { x = y, z = w } }template-haskell { (f x) { z = w } }template-haskell  { e :: t }template-haskell  { static e }template-haskell  { (e1,e2) }The  + is necessary for handling tuple sections. (1,) translates to 'TupE [Just (LitE (IntegerL 1)),Nothing]template-haskell {x + y}See  Language.Haskell.TH.Syntax#infixtemplate-haskell { _x }This is used for holes or unresolved identifiers in AST quotes. Note that it could either have a variable name or constructor name.template-haskell  { (#|e|#) }template-haskell { (# e1,e2 #) }The  + is necessary for handling tuple sections.  (# 'c', #) translates to -UnboxedTupE [Just (LitE (CharL 'c')),Nothing]template-haskell { x }template-haskellType family result signaturetemplate-haskell ktemplate-haskell no signaturetemplate-haskell = r, = (r :: k)template-haskell f x { | odd x } = xtemplate-haskell &f x { | Just y <- x, Just z <- y } = ztemplate-haskellObtained from  in the  Monad.template-haskell-A class, with a list of its visible instancestemplate-haskellA class methodtemplate-haskellA data constructortemplate-haskellA type or data family, with a list of its visible instances. A closed type family is returned with 0 instances.template-haskellA pattern synonymtemplate-haskellA "primitive" type constructor, which can't be expressed with a  . Examples: (->), Int#.template-haskellA "plain" type constructor. "Fancier" type constructors are returned using  or  as appropriate. At present, this reified declaration will never have derived instances attached to it (if you wish to check for an instance, see ).template-haskellA type variable.The Type field contains the type which underlies the variable. At present, this is always  theName5, but future changes may permit refinement of this.template-haskell7A "value" variable (as opposed to a type variable, see ).The  Maybe Dec field contains Just the declaration which defined the variable - including the RHS of the declaration - or else Nothing, in the case where the RHS is unavailable to the compiler. At present, this value is always Nothing: returning the RHS has not yet been implemented because of lack of interest.template-haskell describes a single instance of a class or type function. It is just a ,, but guaranteed to be one of the following: (with empty []) or  (with empty derived [])template-haskellSome raw bytes, type  :template-haskellUsed for overloaded and non-overloaded literals. We don't have a good way to represent non-overloaded literals at the moment. Maybe that doesn't matter?template-haskell!A primitive C-style string, type  template-haskell $case e of { pat -> body where decs }template-haskellObtained from  and  .template-haskellObtained from  in the  Monad.template-haskell'Contains the import list of the module.template-haskellGlobal name bound outside of the TH AST: An original name (occurrences only, not binders) Need the namespace too to be sure which thing we are namingtemplate-haskell&Local name bound outside of the TH ASTtemplate-haskell#A qualified name; dynamically boundtemplate-haskell&An unqualified name; dynamically boundtemplate-haskellA unique local nametemplate-haskellData constructorstemplate-haskellType constructors and classes; Haskell has them in the same name space for now.template-haskell Variablestemplate-haskellIn  and ", name of the parent class or typetemplate-haskell  { x @ p }template-haskell { !p }template-haskell 'data T1 = C1 t1 t2; {C1 @ty1 p1 p2} = etemplate-haskell foo ({x :+ y}) = etemplate-haskell  { [1,2,3] }template-haskell  { 5 or 'c' }template-haskell {(p)}See  Language.Haskell.TH.Syntax#infixtemplate-haskell f (Pt { pointx = x }) = g xtemplate-haskell  { p :: t }template-haskell { ~p }template-haskell  { (p1,p2) }template-haskell foo ({x :+ y}) = eSee  Language.Haskell.TH.Syntax#infixtemplate-haskell  { (#|p|#) }template-haskell { (# p1,p2 #) }template-haskell { x }template-haskell  { e -> p }template-haskell { _ }template-haskell"A pattern synonym's argument type.template-haskell pattern {x P y} = ptemplate-haskell pattern P {x y z} = ptemplate-haskell pattern P { {x,y,z} } = ptemplate-haskell#A pattern synonym's directionality.template-haskell  pattern P x {<-} p where P x = etemplate-haskell pattern P x {=} ptemplate-haskell pattern P x {<-} ptemplate-haskell8A pattern synonym's type. Note that a pattern synonym's fully specified type has a peculiar shape coming with two forall quantifiers and two constraint contexts. For example, consider the pattern synonym 'pattern P x1 x2 ... xn = *P's complete type is of the following form pattern P :: forall universals. required constraints => forall existentials. provided constraints => t1 -> t2 -> ... -> tn -> tconsisting of four parts: the (possibly empty lists of) universally quantified type variables and required constraints on them.the (possibly empty lists of) existentially quantified type variables and the provided constraints on them. the types t1, t2, .., tn of x1, x2, .., xn, respectively the type t of , mentioning only universals.Pattern synonym types interact with TH when (a) reifying a pattern synonym, (b) pretty printing, or (c) specifying a pattern synonym's type signature explicitly:/Reification always returns a pattern synonym's fully( specified type in abstract syntax.Pretty printing via   abbreviates a pattern synonym's type unambiguously in concrete syntax: The rule of thumb is to print initial empty universals and the required context as () =>, if existentials and a provided context follow. If only universals and their required context, but no existentials are specified, only the universals and their required context are printed. If both or none are specified, so both (or none) are printed.>When specifying a pattern synonym's type explicitly with  either one of the universals, the existentials, or their contexts may be left empty.See the GHC user's guide for more information on pattern synonyms and their types:  https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#pattern-synonyms.template-haskell +{ {-# COMPLETE C_1, ..., C_i [ :: T ] #-} }template-haskellRole annotationstemplate-haskell _template-haskell nominaltemplate-haskell phantomtemplate-haskell representationaltemplate-haskell C atemplate-haskell C {~}atemplate-haskell C {!}atemplate-haskell C atemplate-haskell C { {-# NOUNPACK #-} } atemplate-haskell C { {-# UNPACK #-} } atemplate-haskell {a}template-haskell atemplate-haskell p <- etemplate-haskell { let { x=e1; y=e2 } }template-haskell etemplate-haskellx <- e1 | s2, s3 | s4 (in )template-haskell rec { s1; s2 }template-haskellAs of template-haskell-2.11.0.0,  has been replaced by .template-haskellAs of template-haskell-2.11.0.0,  has been replaced by .template-haskellIn  and =, the number associated with a particular data constructor. s are one-indexed and should never exceed the value of its corresponding . For example:(#_|#) has  1 (out of a total  of 2)(#|_#) has  2 (out of a total  of 2)template-haskellIn , , and , the total number of s. For example, (#|#) has a  of 2.template-haskell(Represents an expression which has type a. Built on top of 6, typed expressions allow for type-safe splicing via:typed quotes, written as  [|| ... ||] where ...4 is an expression; if that expression has type a#, then the quotation has type  ( a)1typed splices inside of typed quotes, written as $$(...) where ...) is an arbitrary expression of type  ( a)Traditional expression quotes and splices let us construct ill-typed expressions:.fmap ppr $ runQ [| True == $( [| "foo" |] ) |]#GHC.Types.True GHC.Classes.== "foo"#GHC.Types.True GHC.Classes.== "foo" error: @ Couldn't match expected type @Bool@ with actual type @[Char]@6 @ In the second argument of @(==)@, namely @"foo"@& In the expression: True == "foo"1 In an equation for @it@: it = True == "foo"3With typed expressions, the type error occurs when  constructing" the Template Haskell expression:3fmap ppr $ runQ [|| True == $$( [|| "foo" ||] ) ||] error:. @ Couldn't match type @[Char]@ with @Bool@" Expected type: Q (TExp Bool)$ Actual type: Q (TExp [Char])5 @ In the Template Haskell quotation [|| "foo" ||]& In the expression: [|| "foo" ||]6 In the Template Haskell splice $$([|| "foo" ||])Levity-polymorphic since template-haskell-2.16.0.0.template-haskell'C', @since 4.16.0.0template-haskell 2template-haskell "Hello"template-haskell (a :: k)template-haskell atemplate-haskell T @k ttemplate-haskell T a btemplate-haskell ->template-haskell Ttemplate-haskell  Constrainttemplate-haskell ~template-haskell forall . => template-haskell forall -> template-haskell ?x :: ttemplate-haskell T + Ttemplate-haskell []template-haskell  0,1,2, etc.template-haskell FUNtemplate-haskell (T)template-haskell (':)template-haskell '[]template-haskell 'Ttemplate-haskell '(), '(,), '(,,), etc.template-haskell t :: ktemplate-haskell *template-haskell (,), (,,), etc.template-haskell T + TSee  Language.Haskell.TH.Syntax#infixtemplate-haskell (#|#), (#||#), etc.template-haskell (#,#), (#,,#), etc.template-haskell atemplate-haskell _template-haskellCommon elements of  and . By analogy with "head" for type classes and type class instances as defined in 0Type classes: an exploration of the design space, the TypeFamilyHead; is defined to be the elements of the declaration between  type family and where.template-haskellUniq5 is used by GHC to distinguish names from each other.template-haskellIn #, is the type constructor unlifted?template-haskellAs of template-haskell-2.11.0.0,  has been replaced by .template-haskell Produces an   literal from the NUL-terminated C-string starting at the given memory address.template-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskelltemplate-haskellIf the function passed to  ; inspects its argument, the resulting action will throw a  .template-haskelltemplate-haskell template-haskellhandler to invoke on failuretemplate-haskellcomputation to runtemplate-haskellLine and character positiontemplate-haskell  (Eq a, Ord b)template-haskell { data family T a b c :: * }template-haskell -{ type family T a b c = (r :: *) | r -> a b }template-haskell{ pattern P v1 v2 .. vn <- p }! unidirectional or { pattern P v1 v2 .. vn = p }! implicit bidirectional or ?{ pattern P v1 v2 .. vn <- p where P v1 v2 .. vn = e } explicit bidirectionalalso, besides prefix pattern synonyms, both infix and record pattern synonyms are supported. See  for detailstemplate-haskell { {-# INLINE [1] foo #-} }template-haskell Fresh namestemplate-haskellthe error handlertemplate-haskellaction which may failtemplate-haskellRecover from the monadic  template-haskellReport an error (True) or warning (False) ...but carry on; use   to stop      *Quasi-quoting support for Template HaskellSafeĄtemplate-haskell5Quasi-quoter for expressions, invoked by quotes like lhs = $[q|...]template-haskell2Quasi-quoter for patterns, invoked by quotes like f $[q|...] = rhstemplate-haskell:Quasi-quoter for declarations, invoked by top-level quotestemplate-haskell/Quasi-quoter for types, invoked by quotes like  f :: $[q|...]template-haskell takes a  and lifts it into one that read the data out of a file. For example, suppose asmq is an assembly-language quoter, so that you can write [asmq| ld r1, r2 |] as an expression. Then if you define asmq_f = quoteFile asmq<, then the quote [asmq_f|foo.s|] will take input from file "foo.s" instead of the inline texttemplate-haskellThe  type, a value q) of this type can be used in the syntax [q| ... string to parse ...|] . In fact, for convenience, a  actually defines multiple quasiquoters to be used in different splice contexts; if you are only interested in defining a quasiquoter to be used for expressions, you would define a  with only 6, and leave the other fields stubbed out with errors.  SafeE"template-haskell5Above; if there is no overlap it "dovetails" the twotemplate-haskellAbove, without dovetailing.template-haskellBeside, separated by spacetemplate-haskellBesidetemplate-haskell A "->" stringtemplate-haskellWrap document in {...}template-haskellWrap document in [...]template-haskellEither hcat or vcattemplate-haskellA : charactertemplate-haskellA ',' charactertemplate-haskell A "::" stringtemplate-haskellWrap document in "..."template-haskellAn empty documenttemplate-haskellA '=' charactertemplate-haskell"Paragraph fill" version of cattemplate-haskell"Paragraph fill" version of septemplate-haskell "hang d1 n d2 = sep [d1, nest n d2]template-haskellList version of template-haskellList version of template-haskellReturns   if the document is emptytemplate-haskellA '{' charactertemplate-haskellA '[' character template-haskellA '(' character template-haskellNested template-haskellWrap document in (...) template-haskell punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] template-haskellWrap document in '...' template-haskellA '}' character template-haskellA ']' character template-haskellA ')' character template-haskellA ';' character template-haskellEither hsep or vcat template-haskellA space character template-haskellList version of / /             5566Safe͋ template-haskell.Pretty prints a pattern synonym type signature template-haskellPretty prints a pattern synonym's type; follows the usual conventions to print a pattern synonym type compactly, yet unambiguously. See the note on  and the section on pattern synonyms in the GHC user's guide for more information.  Trustworthy/)template-haskell Use with <*template-haskell Use with XGtemplate-haskell staticE x = [| static x |]stemplate-haskellPattern synonym declarationttemplate-haskellPattern synonym type signaturevtemplate-haskellImplicit parameter binding declaration. Can only be used in let and where clauses which consist entirely of implicit bindings. template-haskell Variant of Z% that attaches Haddock documentation. template-haskell Variant of i% that attaches Haddock documentation. template-haskell7Document a data/newtype constructor with its arguments. template-haskell*Dynamically binding a variable (unhygenic) template-haskell Variant of X% that attaches Haddock documentation. template-haskellSingle-arg lambda template-haskell Variant of [% that attaches Haddock documentation. template-haskell Variant of j% that attaches Haddock documentation. template-haskell Variant of s% that attaches Haddock documentation. template-haskellpure the Module at the place of splicing. Can be used as an input for . template-haskellAttaches Haddock documentation to the declaration provided. Unlike , the names do not need to be in scope when calling this function so it can be used for quoted declarations and anything else currently being spliced. Not all declarations can have documentation attached to them. For those that can't,  3 will return it unchanged without any side effects. template-haskell Variant of   that applies the same documentation to multiple declarations. Useful for documenting quoted declarations. template-haskellLevity-polymorphic since template-haskell-2.17.0.0. template-haskellList of constructors, documentation for the constructor, and documentation for the argumentstemplate-haskell/Documentation to attach to the data declaration template-haskellList of constructors, documentation for the constructor, and documentation for the argumentstemplate-haskell3Documentation to attach to the instance declaration template-haskell#Documentation to attach to functiontemplate-haskell$Documentation to attach to arguments template-haskellThe constructor, documentation for the constructor, and documentation for the argumentstemplate-haskell2Documentation to attach to the newtype declaration template-haskellThe constructor, documentation for the constructor, and documentation for the argumentstemplate-haskell3Documentation to attach to the instance declaration template-haskell.Documentation to attach to the pattern synonymtemplate-haskell0Documentation to attach to the pattern arguments !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         !"#$%&'(STUVW PO Q R)* +,-./ 01234 56789:;<=K> CDEF NGHIJLM?@ABYX\Z[] ^_w`mnoabcdef uijkghlp qrstvx  yz{|}~    SafeO template-haskellCreate a Bytes datatype representing raw bytes to be embedded into the program/library binary. template-haskellPointer to the datatemplate-haskellOffset from the pointertemplate-haskellNumber of bytes !"#$%&'()*+,-./01234589:;<>?@ABCDEFGHIJLMNOPQRSTUVWXY^_`abcdfkmnoprstuvwxyz{|}~         !"#$%&'(PO Q R)* +HIJ,-G./ 01234 5 89:;< CDEF NLM?@AB >STUVW   yz{|}~  x   YX  ^_w rp k  mno`abcd f ustv  Safe-InferredU template-haskellModule over monad operator for   Safez  !"#$%&'()*+,-./01234589:;<>?@ABCDEFGHIJLMNOPQRSTUVWXY^_`abcdfkmnoprstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                                                              kz,huwKY ixvsDjE             template-haskellLanguage.Haskell.TH.Syntax Language.Haskell.TH.Lib.InternalLanguage.Haskell.TH.Quote&Language.Haskell.TH.LanguageExtensionsLanguage.Haskell.TH.PprLibLanguage.Haskell.TH.PprLanguage.Haskell.TH.LibLanguage.Haskell.TH.CodeDoLanguage.Haskell.TH.Lib.Mapdyn thisModule pprPatSynTypeLanguage.Haskell.TH sequenceQliftnewNamemkName mkNameG_v mkNameG_d mkNameG_tcmkNameLmkNameSunType unTypeCode liftTyped mkModNameunsafeCodeCoercecharLstringLintegerLintPrimL wordPrimL floatPrimL doublePrimL rationalL stringPrimL charPrimL liftStringlitPvarPtupP unboxedTupP unboxedSumPconPinfixPtildePbangPasPwildPrecPlistPsigPviewPfieldPatmatchclausevarEconElitEappEappTypeEinfixEinfixAppsectionLsectionRlamElamCaseEtupE unboxedTupE unboxedSumEcondEmultiIfEletEcaseEdoEcompEfromE fromThenEfromToE fromThenToElistEsigErecConErecUpdEstaticE unboundVarElabelEimplicitParamVarEmdoE getFieldE projectionEfieldExpguardedBnormalBnormalGEpatGEbindSletSnoBindSparSrecSfunDvalDdataDnewtypeDtySynDclassDinstanceWithOverlapDsigDforImpDpragInlD pragSpecD pragSpecInlD pragSpecInstD pragRuleDpragAnnD dataFamilyDopenTypeFamilyD dataInstD newtypeInstD tySynInstDclosedTypeFamilyDinfixLDinfixRDinfixND roleAnnotDstandaloneDerivWithStrategyD defaultSigDpatSynD patSynSigD pragCompleteDimplicitParamBindDkiSigDcxtnoSourceUnpackednesssourceNoUnpack sourceUnpacknoSourceStrictness sourceLazy sourceStrictnormalCrecCinfixCforallCgadtCrecGadtCbangbangType varBangTypeunidir implBidir explBidir prefixPatSyn infixPatSyn recordPatSynforallT forallVisTvarTconTtupleT unboxedTupleT unboxedSumTarrowTlistTappTappKindTsigT equalityTlitT promotedTpromotedTupleT promotedNilT promotedConsT wildCardTimplicitParamTinfixTnumTyLitstrTyLit charTyLitplainTVkindedTVnominalRrepresentationalRphantomRinferRstarK constraintKnoSigkindSigtyVarSiginjectivityAnncCallstdCallcApiprim javaScriptunsafesafe interruptiblefunDep mulArrowTtySynEqnquoteExpquotePatquoteDec quoteTyperuleVar typedRuleVar plainInvisTV kindedInvisTVvalueAnnotationtypeAnnotationmoduleAnnotation derivClause specifiedSpec inferredSpecLiftQuoteExpMatchClauseQExpQPatStmtConTypeQTypeDecBangType VarBangTypeFieldExpFieldPatNamePatQFunDepPred TyVarBndrUnitDecsQRuleBndrTySynEqnRoleInjectivityAnnKindOverlap DerivClause DerivStrategyDecs TyVarBndrSpecCodeModNameNoInlineInline InlinableConLikeFunLike AllPhases FromPhase BeforePhase Overlappable OverlappingOverlaps Incoherent stockStrategyanyclassStrategynewtypeStrategy viaStrategyghc-boot-th-9.2.1GHC.LanguageExtensions.Type ViewPatternsUnliftedNewtypesUnliftedFFITypesUnliftedDatatypes UnicodeSyntaxUndecidableSuperClassesUndecidableInstances UnboxedTuples UnboxedSumsTypeSynonymInstances TypeOperators TypeInTypeTypeFamilyDependencies TypeFamiliesTypeApplications TupleSectionsTransformListCompTraditionalRecordSyntaxTemplateHaskellQuotesTemplateHaskell StrictDataStrictStaticPointers StarIsTypeStandaloneKindSignaturesStandaloneDerivingScopedTypeVariablesRoleAnnotationsRelaxedPolyRec RelaxedLayout RecursiveDoRecordWildCards RecordPunsRebindableSyntax RankNTypes QuasiQuotesQuantifiedConstraints QualifiedDoPostfixOperators PolyKindsPatternSynonyms PatternGuardsPartialTypeSignaturesParallelListCompParallelArraysPackageImportsOverloadedStringsOverloadedRecordUpdateOverloadedRecordDotOverloadedListsOverloadedLabelsOverlappingInstancesNumericUnderscores NumDecimalsNullaryTypeClassesNondecreasingIndentationNegativeLiteralsNamedWildCardsNPlusKPatterns MultiWayIfMultiParamTypeClassesMonomorphismRestrictionMonoLocalBindsMonadComprehensions MagicHash LinearTypesLiberalTypeSynonymsLexicalNegation LambdaCaseKindSignatures JavaScriptFFIInterruptibleFFI InstanceSigsIncoherentInstancesImpredicativeTypesImportQualifiedPostImplicitPreludeImplicitParamsHexFloatLiteralsGeneralizedNewtypeDerivingGHCForeignImportPrimGADTs GADTSyntaxFunctionalDependenciesForeignFunctionInterfaceFlexibleInstancesFlexibleContextsFieldSelectorsExtendedDefaultRulesExplicitNamespacesExplicitForAllExistentialQuantificationEmptyDataDerivingEmptyDataDecls EmptyCaseDuplicateRecordFieldsDoAndIfThenElseDisambiguateRecordFields DerivingViaDerivingStrategiesDeriveTraversable DeriveLift DeriveGeneric DeriveFunctorDeriveFoldableDeriveDataTypeableDeriveAnyClassDefaultSignaturesDatatypeContexts DataKindsCppConstraintKindsConstrainedClassMethodsCUSKsCApiFFIBlockArgumentsBinaryLiterals BangPatternsAutoDeriveTypeableArrows ApplicativeDo!AlternativeLayoutRuleTransitionalAlternativeLayoutRuleAllowAmbiguousTypes ExtensionGHC.ForeignSrcLang.Type RawObject LangObjcxxLangObjcLangCxxLangCLangAsmForeignSrcLang addCorePluginaddDependentFileaddForeignFileaddForeignFilePathaddForeignSourceaddModFinalizer addTempFile addTopDeclsbadIObindCode bindCode_cmpEq compareBytescounter dataToExpQ dataToPatQdataToQa defaultFixityeqBytes extsEnabled falseNamegetDocgetQ hoistCode isExtEnabled isInstancejoinCodejustNameleftNameliftCodeliftDatalocation lookupNamelookupTypeNamelookupValueNamemanyName maxPrecedencememcmpmkNameGmkNameU mkOccName mkPkgName mk_tup_name modStringnameBase nameModule namePackage nameSpace newNameIO nonemptyName nothingName occStringoneName pkgStringputDocputQrecoverreifyreifyAnnotationsreifyConStrictness reifyFixityreifyInstances reifyModule reifyRoles reifyTypereport reportError reportWarning rightNamerunIOrunQshowName showName'thenCmptrueName tupleDataName tupleTypeNameunTypeQunboxedSumDataNameunboxedSumTypeNameunboxedTupleDataNameunboxedTupleTypeNameunsafeTExpCoerce AnnLookupAnnLookupModule AnnLookupName AnnTargetModuleAnnotationTypeAnnotationValueAnnotationArityBangBodyGuardedBNormalBBytes bytesOffsetbytesPtr bytesSizeCallconvCApiCCall JavaScriptPrimStdCallCharPos examineCodeForallCGadtCInfixCNormalCRecCRecGadtCCxtClassDClosedTypeFamilyDDataD DataFamilyD DataInstD DefaultSigDForeignDFunDImplicitParamBindDInfixD InstanceDKiSigDNewtypeD NewtypeInstDOpenTypeFamilyDPatSynD PatSynSigDPragmaD RoleAnnotDSigDStandaloneDerivDTySynD TySynInstDValDDecidedStrictness DecidedLazy DecidedStrict DecidedUnpackAnyclassStrategyNewtypeStrategy StockStrategy ViaStrategyDocLocArgDocDeclDocInstDoc ModuleDocAppEAppTypeE ArithSeqECaseECompEConECondEDoE GetFieldEImplicitParamVarEInfixELabelELamCaseELamELetEListELitEMDoEMultiIfEParensE ProjectionERecConERecUpdESigEStaticETupEUInfixE UnboundVarE UnboxedSumE UnboxedTupEVarEFamilyResultSigKindSigNoSigTyVarSigFixityFixityDirectionInfixLInfixNInfixRForeignExportFImportFGuardNormalGPatGInfoClassIClassOpIDataConIFamilyIPatSynI PrimTyConITyConITyVarIVarI InstanceDecLit BytesPrimLCharL CharPrimL DoublePrimL FloatPrimLIntPrimLIntegerL RationalLStringL StringPrimL WordPrimLLocloc_end loc_filename loc_module loc_package loc_startModule ModuleInfo NameFlavourNameGNameLNameQNameSNameUNameIsAloneAppliedInfix NameSpaceDataName TcClsNameVarNameOccName ParentNameAsPBangPConPInfixPListPLitPParensPRecPSigPTildePTupPUInfixP UnboxedSumP UnboxedTupPVarPViewPWildP PatSynArgs InfixPatSyn PrefixPatSyn RecordPatSyn PatSynDir ExplBidir ImplBidirUnidir PatSynTypePhasesPkgNamePragmaAnnP CompletePInlinePLinePRulePSpecialiseInstP SpecialisePunQQuasiqAddCorePluginqAddDependentFileqAddForeignFilePathqAddModFinalizer qAddTempFile qAddTopDecls qExtsEnabledqGetDocqGetQ qIsExtEnabled qLocation qLookupNameqNewNameqPutDocqPutQqRecoverqReifyqReifyAnnotationsqReifyConStrictness qReifyFixityqReifyInstances qReifyModule qReifyRoles qReifyTypeqReportqRunIORangeFromR FromThenR FromThenToRFromToRInferRNominalRPhantomRRepresentationalRRuleVar TypedRuleVar RuleMatchSafety InterruptibleSafeUnsafeSourceStrictnessNoSourceStrictness SourceLazy SourceStrictSourceUnpackednessNoSourceUnpackednessSourceNoUnpack SourceUnpack Specificity InferredSpec SpecifiedSpecBindSLetSNoBindSParSRecS StrictTypeSumAltSumArityTExpTyLit CharTyLitNumTyLitStrTyLit TyVarBndrKindedTVPlainTVAppKindTAppTArrowTConT ConstraintT EqualityTForallT ForallVisTImplicitParamTInfixTListTLitT MulArrowTParensT PromotedConsT PromotedNilT PromotedTPromotedTupleTSigTStarTTupleTUInfixT UnboxedSumT UnboxedTupleTVarT WildCardTTypeFamilyHeadUniqUnlifted VarStrictType$fApplicativeQ $fFunctorQ$fDataAnnLookup $fDataModule $fDataName$fDataAnnTarget $fDataBang$fDataSourceUnpackedness$fDataSourceStrictness $fDataBody $fDataGuard $fDataExp $fDataBytes$fDataCallconv $fDataClause $fDataPat $fDataDec $fDataCon$fDataDecidedStrictness$fDataDerivClause$fDataDerivStrategy $fDataType $fDataDocLoc$fDataFamilyResultSig $fDataFixity$fDataFixityDirection $fDataForeign $fDataSafety $fDataFunDep $fDataStmt $fDataInfo$fDataInjectivityAnn $fDataInline $fDataLit $fDataLoc $fDataMatch $fDataModName $fDataPkgName$fDataModuleInfo $fDataOccName$fDataNameFlavour$fDataNameSpace $fDataOverlap$fDataPatSynArgs$fDataPatSynDir $fDataPhases $fDataPragma $fDataRange $fDataRole$fDataRuleBndr$fDataRuleMatch$fDataSpecificity $fDataTyLit$fDataTySynEqn$fDataTyVarBndr$fDataTypeFamilyHead $fEqAnnLookup $fEqAnnTarget$fEqBang$fEqBody $fEqGuard$fEqExp $fEqBytes $fEqCallconv $fEqClause$fEqCon$fEqDec$fEqDecidedStrictness$fEqDerivClause$fEqDerivStrategy $fEqDocLoc$fEqFamilyResultSig $fEqFixity$fEqFixityDirection $fEqForeign $fEqFunDep$fEqName$fEqStmt$fEqInfo$fEqInjectivityAnn $fEqInline$fEqLit$fEqLoc $fEqMatch $fEqModName $fEqModule$fEqModuleInfo$fEqNameFlavour $fEqNameSpace $fEqOccName $fEqOverlap$fEqPat$fEqPatSynArgs $fEqPatSynDir $fEqPhases $fEqPkgName $fEqPragma $fEqRange$fEqRole $fEqRuleBndr $fEqRuleMatch $fEqSafety$fEqSourceStrictness$fEqSourceUnpackedness$fEqSpecificity $fEqTyLit $fEqTySynEqn $fEqTyVarBndr$fEqType$fEqTypeFamilyHead$fFunctorTyVarBndr$fGenericAnnLookup$fGenericAnnTarget $fGenericBang $fGenericBody$fGenericBytes$fGenericCallconv$fGenericClause $fGenericCon $fGenericDec$fGenericDecidedStrictness$fGenericDerivClause$fGenericDerivStrategy$fGenericDocLoc $fGenericExp$fGenericFamilyResultSig$fGenericFixity$fGenericFixityDirection$fGenericForeign$fGenericFunDep$fGenericGuard $fGenericInfo$fGenericInjectivityAnn$fGenericInline $fGenericLit $fGenericLoc$fGenericMatch$fGenericModName$fGenericModule$fGenericModuleInfo $fGenericName$fGenericNameFlavour$fGenericNameSpace$fGenericOccName$fGenericOverlap $fGenericPat$fGenericPatSynArgs$fGenericPatSynDir$fGenericPhases$fGenericPkgName$fGenericPragma$fGenericRange $fGenericRole$fGenericRuleBndr$fGenericRuleMatch$fGenericSafety$fGenericSourceStrictness$fGenericSourceUnpackedness$fGenericSpecificity $fGenericStmt$fGenericTyLit$fGenericTySynEqn$fGenericTyVarBndr $fGenericType$fGenericTypeFamilyHead$fLiftAddrRepAddr#$fLiftBoxedRep()$fLiftBoxedRep(,)$fLiftBoxedRep(,,)$fLiftBoxedRep(,,,)$fLiftBoxedRep(,,,,)$fLiftBoxedRep(,,,,,)$fLiftBoxedRep(,,,,,,)$fLiftBoxedRepBool$fLiftBoxedRepChar$fLiftBoxedRepDouble$fLiftBoxedRepEither$fLiftBoxedRepFloat$fLiftBoxedRepInt$fLiftBoxedRepInt16$fLiftBoxedRepInt32$fLiftBoxedRepInt64$fLiftBoxedRepInt8$fLiftBoxedRepInteger$fLiftBoxedRepMaybe$fLiftBoxedRepNatural$fLiftBoxedRepNonEmpty$fLiftBoxedRepRatio$fLiftBoxedRepVoid$fLiftBoxedRepWord$fLiftBoxedRepWord16$fLiftBoxedRepWord32$fLiftBoxedRepWord64$fLiftBoxedRepWord8$fLiftBoxedRep[]$fLiftDoubleRepDouble#$fLiftFloatRepFloat#$fLiftIntRepInt#$fLiftSumRep(#|#)$fLiftSumRep(#||#)$fLiftSumRep(#|||#)$fLiftSumRep(#||||#)$fLiftSumRep(#|||||#)$fLiftSumRep(#||||||#)$fLiftTupleRep(##)$fLiftTupleRep(#,#)$fLiftTupleRep(#,,#)$fLiftTupleRep(#,,,#)$fLiftTupleRep(#,,,,#)$fLiftTupleRep(#,,,,,#)$fLiftTupleRep(#,,,,,,#)$fLiftTupleRepSolo#$fLiftWordRepChar#$fLiftWordRepWord# $fMonadFailQ$fMonadQ $fMonadFixQ $fMonadIOQ $fMonoidQ $fSemigroupQ$fOrdAnnLookup$fOrdAnnTarget $fOrdBang $fOrdBody $fOrdGuard$fOrdExp $fOrdBytes $fOrdCallconv $fOrdClause$fOrdCon$fOrdDec$fOrdDecidedStrictness$fOrdDerivClause$fOrdDerivStrategy $fOrdDocLoc$fOrdFamilyResultSig $fOrdFixity$fOrdFixityDirection $fOrdForeign $fOrdFunDep $fOrdName $fOrdStmt $fOrdInfo$fOrdInjectivityAnn $fOrdInline$fOrdLit$fOrdLoc $fOrdMatch $fOrdModName $fOrdModule$fOrdModuleInfo$fOrdNameFlavour$fOrdNameSpace $fOrdOccName $fOrdOverlap$fOrdPat$fOrdPatSynArgs$fOrdPatSynDir $fOrdPhases $fOrdPkgName $fOrdPragma $fOrdRange $fOrdRole $fOrdRuleBndr$fOrdRuleMatch $fOrdSafety$fOrdSourceStrictness$fOrdSourceUnpackedness$fOrdSpecificity $fOrdTyLit $fOrdTySynEqn$fOrdTyVarBndr $fOrdType$fOrdTypeFamilyHead $fQuasiIO$fQuasiQ $fQuoteIO$fQuoteQ$fShowAnnLookup$fShowAnnTarget $fShowBang $fShowBody $fShowBytes$fShowCallconv $fShowClause $fShowCon $fShowDec$fShowDecidedStrictness$fShowDerivClause$fShowDerivStrategy $fShowDocLoc $fShowExp$fShowFamilyResultSig $fShowFixity$fShowFixityDirection $fShowForeign $fShowFunDep $fShowGuard $fShowInfo$fShowInjectivityAnn $fShowInline $fShowLit $fShowLoc $fShowMatch $fShowModName $fShowModule$fShowModuleInfo $fShowName$fShowNameFlavour$fShowNameSpace $fShowOccName $fShowOverlap $fShowPat$fShowPatSynArgs$fShowPatSynDir $fShowPhases $fShowPkgName $fShowPragma $fShowRange $fShowRole$fShowRuleBndr$fShowRuleMatch $fShowSafety$fShowSourceStrictness$fShowSourceUnpackedness$fShowSpecificity $fShowStmt $fShowTyLit$fShowTySynEqn$fShowTyVarBndr $fShowType$fShowTypeFamilyHead quoteFile QuasiQuoter$$$+$<+><>arrowbracesbracketscatcharcoloncommadcolondouble doubleQuotesemptyequalsfcatfloatfsephanghcathsepintintegerisEmptylbracelbracklparennestparenspprNamepprName'ptext punctuatequotesrationalrbracerbrackrparensemisepspacetext to_HPJ_DocvcatDocPprM$fApplicativePprM $fFunctorPprM $fMonadPprM $fShowPprMappPrecbar bytesToStringcommaSepcommaSepApplied commaSepWith fromTANormal hashParensisStarTisSymOcc nestDepthnoPrecopPrecparensIf pprBangTypepprBodypprCxtpprExp pprFields pprFixity pprForall pprForall' pprForallVis pprFunArgType pprGadtRHS pprGuarded pprInfixExppprLit pprMatchPat pprMaybeExp pprParendTypepprParendTypeArgpprPat pprPatSynSig pprPrefixOcc pprRecFields pprStrictType pprStringpprTyApppprTyLit pprUInfixTpprVarBangTypepprVarStrictType ppr_bndrs ppr_cxt_predsppr_datappr_decppr_deriv_clauseppr_deriv_strategy ppr_newtype ppr_overlapppr_sig ppr_tf_head ppr_tySynpprint quoteParenssemiSep showtextlsigPrecsplitunboxedSumBarsunopPrec where_clause ForallVisFlag ForallInvis ForallVisPprpprppr_listPprFlag pprTyVarBndr PrecedenceTypeArgTANormalTyArg $fPprBang $fPprClause$fPprCon$fPprDec$fPprDecidedStrictness$fPprExp$fPprFamilyResultSig $fPprFlag()$fPprFlagSpecificity $fPprForeign $fPprFunDep $fPprInfo$fPprInjectivityAnn $fPprInline$fPprLit$fPprLoc $fPprMatch $fPprModule$fPprModuleInfo $fPprName$fPprPat$fPprPatSynArgs$fPprPatSynDir $fPprPhases $fPprPragma $fPprRange $fPprRole $fPprRuleBndr$fPprRuleMatch$fPprSourceStrictness$fPprSourceUnpackedness $fPprStmt $fPprTyLit$fPprTyVarBndr $fPprType $fPprTypeArg$fPpr[]$fShowForallVisFlagappKappsE arithSeqEarrowK bytesPrimLclassPconK dataD_doc dataInstD_docdocConsequalPfromR fromThenR fromThenToRfromToRfunD_doc instanceDisStrictlam1ElistK newtypeD_docnewtypeInstD_docnormalG notStrictparensEparensPparensTpatG patSynD_doc pragLineDstandaloneDerivD strictTypestringEtupleKuInfixEuInfixPuInfixTunpackedvarK varStrictType withDecDoc withDecsDocBangQ BangTypeQBodyQClauseQCodeQConQCxtQDecQ DerivClauseQDerivStrategyQFamilyResultSigQ FieldExpQ FieldPatQGuardQInfoQKindQMatchQ PatSynArgsQ PatSynDirQPredQRangeQ RuleBndrQSourceStrictnessQSourceUnpackednessQStmtQ StrictTypeQTExpQTyLitQ TySynEqnQ VarBangTypeQVarStrictTypeQmkBytes>>>>=insertlookupMapbase GHC.MaybeJustGHC.BaseString Data.DataDataNothingControl.Monad.Failfailghc-prim GHC.ClassesEqMaybeGHC.PrimAddr#Control.Monad.FixmfixGHC.IO.ExceptionFixIOException GHC.TypesTrue