microlens-th-0.4.3.5: Automatic generation of record lenses for microlens

Copyright | (C) 2013-2016 Eric Mertens Edward Kmett; 2018 Monadfix
License | BSD-style (see the file LICENSE)
Safe Haskell | Safe
Language | Haskell2010

Lens.Micro.TH.Internal

Contents

- Name utilities
- Type variable utilities
- Miscellaneous utilities
- Lens functions

Description

Functions used by Lens.Micro.TH. This is an internal module and it may go away or change at any time; do not depend on it.

Synopsis

- class HasName t where
  - name :: Lens' t Name
- newNames :: String -> Int -> Q [Name]
- class HasTypeVars t where
  - typeVarsEx :: Set Name -> Traversal' t Name
- typeVars :: HasTypeVars t => Traversal' t Name
- substTypeVars :: HasTypeVars t => Map Name Name -> t -> t
- inlinePragma :: Name -> [DecQ]
- conAppsT :: Name -> [Type] -> Type
- quantifyType :: Cxt -> Type -> Type
- quantifyType' :: Set Name -> Cxt -> Type -> Type
- elemOf :: Eq a => Getting (Endo [a]) s a -> a -> s -> Bool
- lengthOf :: Getting (Endo [a]) s a -> s -> Int
- setOf :: Ord a => Getting (Endo [a]) s a -> s -> Set a
- _ForallT :: Traversal' Type ([TyVarBndr], Cxt, Type)

# Name utilities

class HasName t where Source #

Has a `Name`

Methods

name :: Lens' t Name Source #

Extract (or modify) the `Name` of something

#### Instances

Instances details

HasName Name Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods name :: Lens' Name Name Source #
HasName Con Source # | On `template-haskell-2.11.0.0` or later, if a `GadtC` or `RecGadtC` has multiple `Name`s, the leftmost `Name` will be chosen.
Instance details Defined in Lens.Micro.TH.Internal Methods name :: Lens' Con Name Source #
HasName TyVarBndr Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods name :: Lens' TyVarBndr Name Source #

newNames Source #

Arguments

:: String | base name
-> Int | count
-> Q [Name] |

Generate many new names from a given base name.

# Type variable utilities

class HasTypeVars t where Source #

Provides for the extraction of free type variables, and alpha renaming.

Methods

typeVarsEx :: Set Name -> Traversal' t Name Source #

#### Instances

Instances details

HasTypeVars Type Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods typeVarsEx :: Set Name -> Traversal' Type Name Source #
HasTypeVars Name Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods typeVarsEx :: Set Name -> Traversal' Name Name Source #
HasTypeVars Con Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods typeVarsEx :: Set Name -> Traversal' Con Name Source #
HasTypeVars TyVarBndr Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods typeVarsEx :: Set Name -> Traversal' TyVarBndr Name Source #
HasTypeVars t => HasTypeVars [t] Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods typeVarsEx :: Set Name -> Traversal' [t] Name Source #
HasTypeVars t => HasTypeVars (Maybe t) Source # |
Instance details Defined in Lens.Micro.TH.Internal Methods typeVarsEx :: Set Name -> Traversal' (Maybe t) Name Source #

typeVars :: HasTypeVars t => Traversal' t Name Source #

substTypeVars :: HasTypeVars t => Map Name Name -> t -> t Source #

# Miscellaneous utilities

inlinePragma :: Name -> [DecQ] Source #

Generate an INLINE pragma.

conAppsT :: Name -> [Type] -> Type Source #

Apply arguments to a type constructor.

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.

# Lens functions

elemOf :: Eq a => Getting (Endo [a]) s a -> a -> s -> Bool Source #

lengthOf :: Getting (Endo [a]) s a -> s -> Int Source #

setOf :: Ord a => Getting (Endo [a]) s a -> s -> Set a Source #

_ForallT :: Traversal' Type ([TyVarBndr], Cxt, Type) Source #