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 |
Synopsis
- appsT :: TypeQ -> [TypeQ] -> TypeQ
- 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]
- quantifyType :: Cxt -> Type -> Type
- quantifyType' :: Set Name -> Cxt -> Type -> Type
- tvbToType :: TyVarBndr_ flag -> Type
- unSigT :: Type -> Type
- isDataFamily :: DatatypeVariant -> Bool
- 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
- composeValName :: Name
- idValName :: Name
- fmapValName :: Name
- pureValName :: Name
- apValName :: Name
- rightDataName :: Name
- leftDataName :: Name
- inlinePragma :: Name -> [DecQ]
Documentation
Generate many new names from a given base name.
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 sincePolyKinds
impliesKindSignatures
, 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
TypeFamilies
extension impliesKindSignatures
.
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.
quantifyType' :: Set Name -> Cxt -> Type -> Type Source #
This function works like quantifyType
except that it takes
a list of variables to exclude from quantification.
isDataFamily :: DatatypeVariant -> Bool Source #
lensTypeName :: Name Source #
lens'TypeName :: Name Source #
isoTypeName :: Name Source #
iso'TypeName :: Name Source #
foldTypeName :: Name Source #
prismTypeName :: Name Source #
isoValName :: Name Source #
prismValName :: Name Source #
untoValName :: Name Source #
phantom2 :: (Functor f, Contravariant f) => f a -> f b Source #
fmapValName :: Name Source #
pureValName :: Name Source #
rightDataName :: Name Source #
leftDataName :: Name Source #
inlinePragma :: Name -> [DecQ] Source #