The shared functionality behind Lens.Family.TH and Lens.Family2.TH.
By default, if the field name begins with an underscore, then the underscore will simply be removed (and the new first character lowercased if necessary).
Information about the larger type the lens will operate on.
Information about the smaller type the lens will operate on.
|:: (Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec])|
the signature deriver
|-> (String -> Maybe String)|
the name transformer
|-> Q [Dec]|
The true workhorse of lens derivation. This macro is parameterized by a macro that derives signatures, as well as a function that filters and transforms names. Producing Nothing means that a lens should not be generated for the provided name.