lens-4.17: Lenses, Folds and Traversals

Copyright(C) 2014-2016 Edward Kmett (C) 2014 Eric Mertens
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe
LanguageHaskell98

Control.Lens.Internal.FieldTH

Description

 
Synopsis

Documentation

data LensRules #

Rules to construct lenses for data fields.

Constructors

LensRules 

Fields

type FieldNamer #

Arguments

 = Name

Name of the data type that lenses are being generated for.

-> [Name]

Names of all fields (including the field being named) in the data type.

-> Name

Name of the field being named.

-> [DefName]

Name(s) of the lens functions. If empty, no lens is created for that field.

The rule to create function names of lenses for data fields.

Although it's sometimes useful, you won't need the first two arguments most of the time.

data DefName #

Name to give to generated field optics.

Constructors

TopName Name

Simple top-level definiton name

MethodName Name Name

makeFields-style class name and method name

Instances
Eq DefName # 
Instance details

Defined in Control.Lens.Internal.FieldTH

Methods

(==) :: DefName -> DefName -> Bool #

(/=) :: DefName -> DefName -> Bool #

Ord DefName # 
Instance details

Defined in Control.Lens.Internal.FieldTH

Show DefName # 
Instance details

Defined in Control.Lens.Internal.FieldTH

type ClassyNamer #

Arguments

 = Name

Name of the data type that lenses are being generated for.

-> Maybe (Name, Name)

Names of the class and the main method it generates, respectively.

The optional rule to create a class and method around a monomorphic data type. If this naming convention is provided, it generates a "classy" lens.

makeFieldOptics :: LensRules -> Name -> DecsQ #

Compute the field optics for the type identified by the given type name. Lenses will be computed when possible, Traversals otherwise.

type HasFieldClasses = StateT (Set Name) Q #

Tracks the field class Names that have been created so far. We consult these so that we may avoid creating duplicate classes.