| Copyright | (C) 2013-2016 Edward Kmett and Eric Mertens |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Edward Kmett <ekmett@gmail.com> |
| Stability | experimental |
| Portability | non-portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Control.Lens.Internal.TH
Description
Synopsis
- unSigT :: Type -> Type
- apValName :: Name
- composeValName :: Name
- fmapValName :: Name
- idValName :: Name
- pureValName :: Name
- quantifyType :: Cxt -> Type -> Type
- appsT :: TypeQ -> [TypeQ] -> TypeQ
- haskellKeywords :: Set String
- ghcExtensionKeywords :: Set String
- explicitForAllKeywords :: Set String
- recursiveDoKeywords :: Set String
- arrowsKeywords :: Set String
- patternSynonymsKeywords :: Set String
- transformListCompKeywords :: Set String
- staticPointersKeywords :: Set String
- roleAnnotationsKeywords :: Set String
- appsE1 :: ExpQ -> [ExpQ] -> ExpQ
- toTupleT :: [TypeQ] -> TypeQ
- toTupleE :: [ExpQ] -> ExpQ
- toTupleP :: [PatQ] -> PatQ
- conAppsT :: Name -> [Type] -> Type
- newNames :: String -> Int -> Q [Name]
- unfoldType :: Type -> (Type, [Type])
- datatypeTypeKinded :: DatatypeInfo -> Type
- dropSigsIfNonDataFam :: DatatypeInfo -> [Type] -> [Type]
- isDataFamily :: DatatypeVariant -> Bool
- quantifyType' :: Set Name -> Cxt -> Type -> Type
- tvbToType :: TyVarBndr_ flag -> Type
- activeKeywords :: Q (Set String)
- avoidName :: Set String -> Name -> Name
- traversalTypeName :: Name
- traversal'TypeName :: Name
- lensTypeName :: Name
- lens'TypeName :: Name
- isoTypeName :: Name
- iso'TypeName :: Name
- getterTypeName :: Name
- foldTypeName :: Name
- prismTypeName :: Name
- prism'TypeName :: Name
- reviewTypeName :: Name
- wrappedTypeName :: Name
- unwrappedTypeName :: Name
- rewrappedTypeName :: Name
- _wrapped'ValName :: Name
- isoValName :: Name
- prismValName :: Name
- untoValName :: Name
- phantomValName :: Name
- phantom2 :: (Functor f, Contravariant f) => f a -> f b
- rightDataName :: Name
- leftDataName :: Name
- inlinePragma :: Name -> [DecQ]
- type TyVarBndrVis = TyVarBndr_ BndrVis
- bndrReq :: BndrVis
Documentation
composeValName :: Name Source #
fmapValName :: Name Source #
pureValName :: Name Source #
quantifyType :: Cxt -> Type -> Type Source #
Template Haskell wants type variables declared in a forall, so we find all free type variables in a given type and declare them.
haskellKeywords :: Set String Source #
Haskell's reserved identifiers, which cannot be used as names of functions or class methods.
This mirrors the check GHC applies to spliced declarations
(okVarOcc/reservedIds in GHC.Utils.Lexeme from ghc-boot, on which
we do not wish to depend). GHC 9.10 and later treat forall as an
unconditional keyword, so it is included when building with those GHCs.
ghcExtensionKeywords :: Set String Source #
Identifiers reserved by GHC language extensions.
explicitForAllKeywords :: Set String Source #
Identifiers that explicit-forall extensions reserve: forall.
recursiveDoKeywords :: Set String Source #
Identifiers that the RecursiveDo extension reserves: mdo and rec.
arrowsKeywords :: Set String Source #
Identifiers that the Arrows extension reserves: proc and rec.
patternSynonymsKeywords :: Set String Source #
Identifiers that the PatternSynonyms extension reserves: pattern.
transformListCompKeywords :: Set String Source #
Identifiers that the TransformListComp extension reserves:
by and using.
staticPointersKeywords :: Set String Source #
Identifiers that the StaticPointers extension reserves: static.
roleAnnotationsKeywords :: Set String Source #
Identifiers that the RoleAnnotations extension reserves: role.
This is provided for callers who want a conservative list of extension
keywords. activeKeywords deliberately does not reject role, since it is
still valid as a generated function or class method name.
Arguments
| :: String | base name |
| -> Int | count |
| -> Q [Name] |
Generate many new names from a given base name.
unfoldType :: Type -> (Type, [Type]) Source #
Decompose an applied type into its individual components. For example, this:
Either Int Char
would be unfolded to this:
(ConT''Either, [ConT''Int,ConT''Char])
This function ignores explicit parentheses and visible kind applications.
datatypeTypeKinded :: DatatypeInfo -> Type Source #
dropSigsIfNonDataFam :: DatatypeInfo -> [Type] -> [Type] Source #
In an effort to prevent users from having to enable KindSignatures every time that they use lens' TH functionality, we strip off reified kind annotations from when:
- The kind of a type does not contain any kind variables. If it *does*
contain kind variables, we want to preserve them so that we can generate
type signatures that preserve the dependency order of kind and type
variables. (The data types in test/T917.hs contain examples where this
is important.) This will require enabling
PolyKinds, but sincePolyKindsimpliesKindSignatures, we can at least accomplish two things at once. - The data type is not an instance of a data family. We make an exception
for data family instances, since the presence or absence of a kind
annotation can be the difference between typechecking or not.
(See T917DataFam in tests/T917.hs for an example.) Moreover, the
TypeFamiliesextension impliesKindSignatures.
isDataFamily :: DatatypeVariant -> Bool Source #
quantifyType' :: Set Name -> Cxt -> Type -> Type Source #
This function works like quantifyType except that it takes
a list of variables to exclude from quantification.
tvbToType :: TyVarBndr_ flag -> Type Source #
Convert a TyVarBndr into its corresponding Type.
activeKeywords :: Q (Set String) Source #
Haskell keywords plus the identifiers reserved by enabled extensions that would make generated functions or class methods fail to parse.
avoidName :: Set String -> Name -> Name Source #
Append an underscore to a name that belongs to the given set of reserved identifiers; leave all other names untouched.
traversalTypeName :: Name Source #
traversal'TypeName :: Name Source #
lensTypeName :: Name Source #
lens'TypeName :: Name Source #
isoTypeName :: Name Source #
iso'TypeName :: Name Source #
getterTypeName :: Name Source #
foldTypeName :: Name Source #
prismTypeName :: Name Source #
prism'TypeName :: Name Source #
reviewTypeName :: Name Source #
wrappedTypeName :: Name Source #
unwrappedTypeName :: Name Source #
rewrappedTypeName :: Name Source #
_wrapped'ValName :: Name Source #
isoValName :: Name Source #
prismValName :: Name Source #
untoValName :: Name Source #
phantomValName :: Name Source #
phantom2 :: (Functor f, Contravariant f) => f a -> f b Source #
rightDataName :: Name Source #
leftDataName :: Name Source #
inlinePragma :: Name -> [DecQ] Source #
type TyVarBndrVis = TyVarBndr_ BndrVis #
A TyVarBndr with a BndrVis flag. This is used for TyVarBndrs in
type-level declarations (e.g., the binders in data D @k (a :: k)).