This file is indexed.

/usr/share/doc/libghc-lens-doc/html/Control-Lens-TH.html is in libghc-lens-doc 4.13-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Control.Lens.TH</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Control-Lens-TH.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Lens-TH.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">lens-4.13: Lenses, Folds and Traversals</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Copyright</th><td>(C) 2012-15 Edward Kmett, 2012-13 Michael Sloan</td></tr><tr><th>License</th><td>BSD-style (see the file LICENSE)</td></tr><tr><th>Maintainer</th><td>Edward Kmett &lt;ekmett@gmail.com&gt;</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Portability</th><td>non-portable</td></tr><tr><th>Safe Haskell</th><td>Trustworthy</td></tr><tr><th>Language</th><td>Haskell98</td></tr></table><p class="caption">Control.Lens.TH</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Constructing Lenses Automatically</a></li><li><a href="#g:2">Constructing Lenses Given a Declaration Quote</a></li><li><a href="#g:3">Configuring Lenses</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc empty">&nbsp;</div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:makeLenses">makeLenses</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeLensesFor">makeLensesFor</a> :: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeClassy">makeClassy</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeClassyFor">makeClassyFor</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a> -&gt; [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeClassy_">makeClassy_</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makePrisms">makePrisms</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeClassyPrisms">makeClassyPrisms</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeWrapped">makeWrapped</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeFields">makeFields</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declareLenses">declareLenses</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declareLensesFor">declareLensesFor</a> :: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declareClassy">declareClassy</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declareClassyFor">declareClassyFor</a> :: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>))] -&gt; [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declarePrisms">declarePrisms</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declareWrapped">declareWrapped</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declareFields">declareFields</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:makeLensesWith">makeLensesWith</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:declareLensesWith">declareLensesWith</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></li><li class="src short"><a href="#v:defaultFieldRules">defaultFieldRules</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><a href="#v:camelCaseFields">camelCaseFields</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><a href="#v:underscoreFields">underscoreFields</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><a href="#v:abbreviatedFields">abbreviatedFields</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:LensRules">LensRules</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:DefName">DefName</a><ul class="subs"><li>= <a href="#v:TopName">TopName</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a></li><li>| <a href="#v:MethodName">MethodName</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a></li></ul></li><li class="src short"><a href="#v:lensRules">lensRules</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><a href="#v:lensRulesFor">lensRulesFor</a> :: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><a href="#v:classyRules">classyRules</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><a href="#v:classyRules_">classyRules_</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></li><li class="src short"><a href="#v:lensField">lensField</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; [<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a>] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; [<a href="Control-Lens-TH.html#t:DefName">DefName</a>])</li><li class="src short"><a href="#v:lensClass">lensClass</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a>))</li><li class="src short"><a href="#v:simpleLenses">simpleLenses</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:createClass">createClass</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:generateSignatures">generateSignatures</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:generateUpdateableOptics">generateUpdateableOptics</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:generateLazyPatterns">generateLazyPatterns</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a></li></ul></div><div id="interface"><h1 id="g:1">Constructing Lenses Automatically</h1><div class="top"><p class="src"><a name="v:makeLenses" class="def">makeLenses</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeLenses" class="link">Source</a></p><div class="doc"><p>Build lenses (and traversals) with a sensible default configuration.</p><p><em>e.g.</em></p><pre>data FooBar
  = Foo { _x, _y :: <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> }
  | Bar { _x :: <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> }
<code><a href="Control-Lens-TH.html#v:makeLenses">makeLenses</a></code> ''FooBar
</pre><p>will create</p><pre>x :: <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> FooBar <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code>
x f (Foo a b) = (\a' -&gt; Foo a' b) &lt;$&gt; f a
x f (Bar a)   = Bar &lt;$&gt; f a
y :: <code><a href="Control-Lens-Type.html#t:Traversal-39-">Traversal'</a></code> FooBar <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code>
y f (Foo a b) = (\b' -&gt; Foo a  b') &lt;$&gt; f b
y _ c@(Bar _) = pure c
</pre><pre><code><a href="Control-Lens-TH.html#v:makeLenses">makeLenses</a></code> = <code><a href="Control-Lens-TH.html#v:makeLensesWith">makeLensesWith</a></code> <code><a href="Control-Lens-TH.html#v:lensRules">lensRules</a></code>
</pre></div></div><div class="top"><p class="src"><a name="v:makeLensesFor" class="def">makeLensesFor</a> :: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeLensesFor" class="link">Source</a></p><div class="doc"><p>Derive lenses and traversals, specifying explicit pairings
 of <code>(fieldName, lensName)</code>.</p><p>If you map multiple names to the same label, and it is present in the same
 constructor then this will generate a <code><a href="Control-Lens-Type.html#t:Traversal">Traversal</a></code>.</p><p><em>e.g.</em></p><pre><code><a href="Control-Lens-TH.html#v:makeLensesFor">makeLensesFor</a></code> [(&quot;_foo&quot;, &quot;fooLens&quot;), (&quot;baz&quot;, &quot;lbaz&quot;)] ''Foo
<code><a href="Control-Lens-TH.html#v:makeLensesFor">makeLensesFor</a></code> [(&quot;_barX&quot;, &quot;bar&quot;), (&quot;_barY&quot;, &quot;bar&quot;)] ''Bar
</pre></div></div><div class="top"><p class="src"><a name="v:makeClassy" class="def">makeClassy</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeClassy" class="link">Source</a></p><div class="doc"><p>Make lenses and traversals for a type, and create a class when the
 type has no arguments.</p><p><em>e.g.</em></p><pre>data Foo = Foo { _fooX, _fooY :: <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> }
<code><a href="Control-Lens-TH.html#v:makeClassy">makeClassy</a></code> ''Foo
</pre><p>will create</p><pre>class HasFoo t where
  foo :: <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> t Foo
  fooX :: <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> t <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code>
  fooX = foo . go where go f (Foo x y) = (\x' -&gt; Foo x' y) &lt;$&gt; f x
  fooY :: <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> t <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code>
  fooY = foo . go where go f (Foo x y) = (\y' -&gt; Foo x y') &lt;$&gt; f y
instance HasFoo Foo where
  foo = id
</pre><pre><code><a href="Control-Lens-TH.html#v:makeClassy">makeClassy</a></code> = <code><a href="Control-Lens-TH.html#v:makeLensesWith">makeLensesWith</a></code> <code><a href="Control-Lens-TH.html#v:classyRules">classyRules</a></code>
</pre></div></div><div class="top"><p class="src"><a name="v:makeClassyFor" class="def">makeClassyFor</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a> -&gt; [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeClassyFor" class="link">Source</a></p><div class="doc"><p>Derive lenses and traversals, using a named wrapper class, and
 specifying explicit pairings of <code>(fieldName, traversalName)</code>.</p><p>Example usage:</p><pre><code><a href="Control-Lens-TH.html#v:makeClassyFor">makeClassyFor</a></code> &quot;HasFoo&quot; &quot;foo&quot; [(&quot;_foo&quot;, &quot;fooLens&quot;), (&quot;bar&quot;, &quot;lbar&quot;)] ''Foo
</pre></div></div><div class="top"><p class="src"><a name="v:makeClassy_" class="def">makeClassy_</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeClassy_" class="link">Source</a></p><div class="doc"><p>Make lenses and traversals for a type, and create a class when the type
 has no arguments.  Works the same as <code><a href="Control-Lens-TH.html#v:makeClassy">makeClassy</a></code> except that (a) it
 expects that record field names do not begin with an underscore, (b) all
 record fields are made into lenses, and (c) the resulting lens is prefixed
 with an underscore.</p></div></div><div class="top"><p class="src"><a name="v:makePrisms" class="def">makePrisms</a> <a href="src/Control-Lens-Internal-PrismTH.html#makePrisms" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a></td><td class="doc"><p>Type constructor name </p></td></tr><tr><td class="src">-&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Generate a <code>Prism</code> for each constructor of a data type.
 Isos generated when possible.
 Reviews are created for constructors with existentially
 quantified constructors and GADTs.</p><p><em>e.g.</em></p><pre>data FooBarBaz a
  = Foo Int
  | Bar a
  | Baz Int Char
makePrisms ''FooBarBaz
</pre><p>will create</p><pre>_Foo :: Prism' (FooBarBaz a) Int
_Bar :: Prism (FooBarBaz a) (FooBarBaz b) a b
_Baz :: Prism' (FooBarBaz a) (Int, Char)
</pre></div></div><div class="top"><p class="src"><a name="v:makeClassyPrisms" class="def">makeClassyPrisms</a> <a href="src/Control-Lens-Internal-PrismTH.html#makeClassyPrisms" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a></td><td class="doc"><p>Type constructor name </p></td></tr><tr><td class="src">-&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Generate a <code>Prism</code> for each constructor of a data type
 and combine them into a single class. No Isos are created.
 Reviews are created for constructors with existentially
 quantified constructors and GADTs.</p><p><em>e.g.</em></p><pre>data FooBarBaz a
  = Foo Int
  | Bar a
  | Baz Int Char
makeClassyPrisms ''FooBarBaz
</pre><p>will create</p><pre>class AsFooBarBaz s a | s -&gt; a where
  _FooBarBaz :: Prism' s (FooBarBaz a)
  _Foo :: Prism' s Int
  _Bar :: Prism' s a
  _Baz :: Prism' s (Int,Char)

  _Foo = _FooBarBaz . _Foo
  _Bar = _FooBarBaz . _Bar
  _Baz = _FooBarBaz . _Baz

instance AsFooBarBaz (FooBarBaz a) a
</pre><p>Generate an <a href="As.html">As</a> class of prisms. Names are selected by prefixing the constructor
 name with an underscore.  Constructors with multiple fields will
 construct Prisms to tuples of those fields.</p></div></div><div class="top"><p class="src"><a name="v:makeWrapped" class="def">makeWrapped</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeWrapped" class="link">Source</a></p><div class="doc"><p>Build <code>Wrapped</code> instance for a given newtype</p></div></div><div class="top"><p class="src"><a name="v:makeFields" class="def">makeFields</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeFields" class="link">Source</a></p><div class="doc"><p>Generate overloaded field accessors.</p><p><em>e.g</em></p><pre>data Foo a = Foo { _fooX :: <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code>, _fooY : a }
newtype Bar = Bar { _barX :: <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Char.html#t:Char">Char</a></code> }
makeFields ''Foo
makeFields ''Bar
</pre><p>will create</p><pre>_fooXLens :: Lens' (Foo a) Int
_fooYLens :: Lens (Foo a) (Foo b) a b
class HasX s a | s -&gt; a where
  x :: Lens' s a
instance HasX (Foo a) Int where
  x = _fooXLens
class HasY s a | s -&gt; a where
  y :: Lens' s a
instance HasY (Foo a) a where
  y = _fooYLens
_barXLens :: Iso' Bar Char
instance HasX Bar Char where
  x = _barXLens
</pre><p>For details, see <code><a href="Control-Lens-TH.html#v:camelCaseFields">camelCaseFields</a></code>.</p><pre>makeFields = <code><a href="Control-Lens-TH.html#v:makeLensesWith">makeLensesWith</a></code> <code><a href="Control-Lens-TH.html#v:defaultFieldRules">defaultFieldRules</a></code>
</pre></div></div><h1 id="g:2">Constructing Lenses Given a Declaration Quote</h1><div class="top"><p class="src"><a name="v:declareLenses" class="def">declareLenses</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declareLenses" class="link">Source</a></p><div class="doc"><p>Make lenses for all records in the given declaration quote. All record
 syntax in the input will be stripped off.</p><p><em>e.g.</em></p><pre>declareLenses [d|
  data Foo = Foo { fooX, fooY :: <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> }
    deriving <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Text-Show.html#t:Show">Show</a></code>
  |]
</pre><p>will create</p><pre>data Foo = Foo <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> deriving <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Text-Show.html#t:Show">Show</a></code>
fooX, fooY :: <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> Foo Int
</pre></div></div><div class="top"><p class="src"><a name="v:declareLensesFor" class="def">declareLensesFor</a> :: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declareLensesFor" class="link">Source</a></p><div class="doc"><p>Similar to <code><a href="Control-Lens-TH.html#v:makeLensesFor">makeLensesFor</a></code>, but takes a declaration quote.</p></div></div><div class="top"><p class="src"><a name="v:declareClassy" class="def">declareClassy</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declareClassy" class="link">Source</a></p><div class="doc"><p>For each record in the declaration quote, make lenses and traversals for
 it, and create a class when the type has no arguments. All record syntax
 in the input will be stripped off.</p><p><em>e.g.</em></p><pre>declareClassy [d|
  data Foo = Foo { fooX, fooY :: <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> }
    deriving <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Text-Show.html#t:Show">Show</a></code>
  |]
</pre><p>will create</p><pre>data Foo = Foo <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code> deriving <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Text-Show.html#t:Show">Show</a></code>
class HasFoo t where
  foo :: <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> t Foo
instance HasFoo Foo where foo = <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Function.html#v:id">id</a></code>
fooX, fooY :: HasFoo t =&gt; <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> t <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Int.html#t:Int">Int</a></code>
</pre></div></div><div class="top"><p class="src"><a name="v:declareClassyFor" class="def">declareClassyFor</a> :: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>))] -&gt; [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declareClassyFor" class="link">Source</a></p><div class="doc"><p>Similar to <code><a href="Control-Lens-TH.html#v:makeClassyFor">makeClassyFor</a></code>, but takes a declaration quote.</p></div></div><div class="top"><p class="src"><a name="v:declarePrisms" class="def">declarePrisms</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declarePrisms" class="link">Source</a></p><div class="doc"><p>Generate a <code>Prism</code> for each constructor of each data type.</p><p><em>e.g.</em></p><pre>declarePrisms [d|
  data Exp = Lit Int | Var String | Lambda{ bound::String, body::Exp }
  |]
</pre><p>will create</p><pre>data Exp = Lit Int | Var String | Lambda { bound::String, body::Exp }
_Lit :: <code>Prism'</code> Exp Int
_Var :: <code>Prism'</code> Exp String
_Lambda :: <code>Prism'</code> Exp (String, Exp)
</pre></div></div><div class="top"><p class="src"><a name="v:declareWrapped" class="def">declareWrapped</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declareWrapped" class="link">Source</a></p><div class="doc"><p>Build <code>Wrapped</code> instance for each newtype.</p></div></div><div class="top"><p class="src"><a name="v:declareFields" class="def">declareFields</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declareFields" class="link">Source</a></p><div class="doc"><pre> declareFields = <code><a href="Control-Lens-TH.html#v:declareLensesWith">declareLensesWith</a></code> <code><a href="Control-Lens-TH.html#v:defaultFieldRules">defaultFieldRules</a></code></pre></div></div><h1 id="g:3">Configuring Lenses</h1><div class="top"><p class="src"><a name="v:makeLensesWith" class="def">makeLensesWith</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#makeLensesWith" class="link">Source</a></p><div class="doc"><p>Build lenses with a custom configuration.</p></div></div><div class="top"><p class="src"><a name="v:declareLensesWith" class="def">declareLensesWith</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Lib.html#t:DecsQ">DecsQ</a> <a href="src/Control-Lens-TH.html#declareLensesWith" class="link">Source</a></p><div class="doc"><p>Declare lenses for each records in the given declarations, using the
 specified <code><a href="Control-Lens-TH.html#t:LensRules">LensRules</a></code>. Any record syntax in the input will be stripped
 off.</p></div></div><div class="top"><p class="src"><a name="v:defaultFieldRules" class="def">defaultFieldRules</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="src/Control-Lens-TH.html#defaultFieldRules" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:camelCaseFields" class="def">camelCaseFields</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="src/Control-Lens-TH.html#camelCaseFields" class="link">Source</a></p><div class="doc"><p>Field rules for fields in the form <code> prefixFieldname or _prefixFieldname </code>
 If you want all fields to be lensed, then there is no reason to use an <code>_</code> before the prefix.
 If any of the record fields leads with an <code>_</code> then it is assume a field without an <code>_</code> should not have a lens created.</p><p><strong>Note</strong>: The <code>prefix</code> must be the same as the typename (with the first
 letter lowercased). This is a change from lens versions before lens 4.5.
 If you want the old behaviour, use <code><a href="Control-Lens-TH.html#v:makeLensesWith">makeLensesWith</a></code> <code><a href="Control-Lens-TH.html#v:abbreviatedFields">abbreviatedFields</a></code></p></div></div><div class="top"><p class="src"><a name="v:underscoreFields" class="def">underscoreFields</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="src/Control-Lens-TH.html#underscoreFields" class="link">Source</a></p><div class="doc"><p>Field rules for fields in the form <code> _prefix_fieldname </code></p></div></div><div class="top"><p class="src"><a name="v:abbreviatedFields" class="def">abbreviatedFields</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="src/Control-Lens-TH.html#abbreviatedFields" class="link">Source</a></p><div class="doc"><p>Field rules fields in the form <code> prefixFieldname or _prefixFieldname </code>
 If you want all fields to be lensed, then there is no reason to use an <code>_</code> before the prefix.
 If any of the record fields leads with an <code>_</code> then it is assume a field without an <code>_</code> should not have a lens created.</p><p>Note that <code>prefix</code> may be any string of characters that are not uppercase
 letters. (In particular, it may be arbitrary string of lowercase letters
 and numbers) This is the behavior that <code><a href="Control-Lens-TH.html#v:defaultFieldRules">defaultFieldRules</a></code> had in lens
 4.4 and earlier.</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:LensRules" class="def">LensRules</a> <a href="src/Control-Lens-Internal-FieldTH.html#LensRules" class="link">Source</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:DefName" class="def">DefName</a> <a href="src/Control-Lens-Internal-FieldTH.html#DefName" class="link">Source</a></p><div class="doc"><p>Name to give to generated field optics.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:TopName" class="def">TopName</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a></td><td class="doc"><p>Simple top-level definiton name</p></td></tr><tr><td class="src"><a name="v:MethodName" class="def">MethodName</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a></td><td class="doc"><p>makeFields-style class name and method name</p></td></tr></table></div><div class="subs instances"><p id="control.i:DefName" class="caption collapser" onclick="toggleSection('i:DefName')">Instances</p><div id="section.i:DefName" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Eq.html#t:Eq">Eq</a> <a href="Control-Lens-TH.html#t:DefName">DefName</a></span> <a href="src/Control-Lens-Internal-FieldTH.html#line-563" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Ord.html#t:Ord">Ord</a> <a href="Control-Lens-TH.html#t:DefName">DefName</a></span> <a href="src/Control-Lens-Internal-FieldTH.html#line-563" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Text-Show.html#t:Show">Show</a> <a href="Control-Lens-TH.html#t:DefName">DefName</a></span> <a href="src/Control-Lens-Internal-FieldTH.html#line-563" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:lensRules" class="def">lensRules</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="src/Control-Lens-TH.html#lensRules" class="link">Source</a></p><div class="doc"><p>Rules for making fairly simple partial lenses, ignoring the special cases
 for isomorphisms and traversals, and not making any classes.</p></div></div><div class="top"><p class="src"><a name="v:lensRulesFor" class="def">lensRulesFor</a> <a href="src/Control-Lens-TH.html#lensRulesFor" class="link">Source</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: [(<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-String.html#t:String">String</a>)]</td><td class="doc"><dl><dt>(Field Name, Definition Name)</dt><dd></dd></dl></td></tr><tr><td class="src">-&gt; <a href="Control-Lens-TH.html#t:LensRules">LensRules</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Construct a <code><a href="Control-Lens-TH.html#t:LensRules">LensRules</a></code> value for generating top-level definitions
 using the given map from field names to definition names.</p></div></div><div class="top"><p class="src"><a name="v:classyRules" class="def">classyRules</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="src/Control-Lens-TH.html#classyRules" class="link">Source</a></p><div class="doc"><p>Rules for making lenses and traversals that precompose another <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>.</p></div></div><div class="top"><p class="src"><a name="v:classyRules_" class="def">classyRules_</a> :: <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="src/Control-Lens-TH.html#classyRules_" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:lensField" class="def">lensField</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; [<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a>] -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; [<a href="Control-Lens-TH.html#t:DefName">DefName</a>]) <a href="src/Control-Lens-TH.html#lensField" class="link">Source</a></p><div class="doc"><p><code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> to access the convention for naming fields in our <code><a href="Control-Lens-TH.html#t:LensRules">LensRules</a></code>.</p><p>Defaults to stripping the _ off of the field name, lowercasing the name, and
 skipping the field if it doesn't start with an '_'. The field naming rule
 provides the names of all fields in the type as well as the current field.
 This extra generality enables field naming conventions that depend on the
 full set of names in a type.</p><p>The field naming rule has access to the type name, the names of all the field
 of that type (including the field being named), and the name of the field
 being named.</p><p>TypeName -&gt; FieldNames -&gt; FieldName -&gt; DefinitionNames</p></div></div><div class="top"><p class="src"><a name="v:lensClass" class="def">lensClass</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a>, <a href="file:///usr/share/doc/ghc-doc/html/libraries/template-haskell-2.10.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a>)) <a href="src/Control-Lens-TH.html#lensClass" class="link">Source</a></p><div class="doc"><p>Retrieve options such as the name of the class and method to put in it to
 build a class around monomorphic data types. <a href="Classy.html">Classy</a> lenses are generated
 when this naming convention is provided.
 TypeName -&gt; Maybe (ClassName, MainMethodName)</p></div></div><div class="top"><p class="src"><a name="v:simpleLenses" class="def">simpleLenses</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Control-Lens-TH.html#simpleLenses" class="link">Source</a></p><div class="doc"><p>Generate &quot;simple&quot; optics even when type-changing optics are possible.
 (e.g. <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> instead of <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>)</p></div></div><div class="top"><p class="src"><a name="v:createClass" class="def">createClass</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Control-Lens-TH.html#createClass" class="link">Source</a></p><div class="doc"><p>Create the class if the constructor is <code><a href="Control-Lens-Type.html#v:Simple">Simple</a></code> and the
 <code><a href="Control-Lens-TH.html#v:lensClass">lensClass</a></code> rule matches.</p></div></div><div class="top"><p class="src"><a name="v:generateSignatures" class="def">generateSignatures</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Control-Lens-TH.html#generateSignatures" class="link">Source</a></p><div class="doc"><p>Indicate whether or not to supply the signatures for the generated
 lenses.</p><p>Disabling this can be useful if you want to provide a more restricted type
 signature or if you want to supply hand-written haddocks.</p></div></div><div class="top"><p class="src"><a name="v:generateUpdateableOptics" class="def">generateUpdateableOptics</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Control-Lens-TH.html#generateUpdateableOptics" class="link">Source</a></p><div class="doc"><p>Generate &quot;updateable&quot; optics when <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#v:True">True</a></code>. When <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#v:False">False</a></code>, <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code>s will be
 generated instead of <code><a href="Control-Lens-Type.html#t:Traversal">Traversal</a></code>s and <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code>s will be generated instead
 of <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>es. This mode is intended to be used for types with invariants
 which must be maintained by &quot;smart&quot; constructors.</p></div></div><div class="top"><p class="src"><a name="v:generateLazyPatterns" class="def">generateLazyPatterns</a> :: <a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a> <a href="Control-Lens-TH.html#t:LensRules">LensRules</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Data-Bool.html#t:Bool">Bool</a> <a href="src/Control-Lens-TH.html#generateLazyPatterns" class="link">Source</a></p><div class="doc"><p>Generate optics using lazy pattern matches. This can
 allow fields of an undefined value to be initialized with lenses:</p><pre>data Foo = Foo {_x :: Int, _y :: Bool}
  deriving Show

<code><a href="Control-Lens-TH.html#v:makeLensesWith">makeLensesWith</a></code> (<code><a href="Control-Lens-TH.html#v:lensRules">lensRules</a></code> &amp; <code><a href="Control-Lens-TH.html#v:generateLazyPatterns">generateLazyPatterns</a></code> .~ True) ''Foo
</pre><pre>&gt; undefined &amp; x .~ 8 &amp; y .~ True
Foo {_x = 8, _y = True}
</pre><p>The downside of this flag is that it can lead to space-leaks and
 code-size/compile-time increases when generated for large records. By
 default this flag is turned off, and strict optics are generated.</p><p>When using lazy optics the strict optic can be recovered by composing
 with <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.8.2.0/Prelude.html#v:-36--33-">$!</a></code>:</p><pre>strictOptic = ($!) . lazyOptic
</pre></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.1</p></div></body></html>