/
Control-Lens-Getter.html
146 lines (146 loc) · 30.5 KB
/
Control-Lens-Getter.html
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
<!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.Getter</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-Getter.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Lens-Getter.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-2.6.1: Lenses, Folds and Traversals</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>Rank2Types</td></tr><tr><th>Stability</th><td>provisional</td></tr><tr><th>Maintainer</th><td>Edward Kmett <ekmett@gmail.com></td></tr><tr><th>Safe Haskell</th><td>Safe-Infered</td></tr></table><p class="caption">Control.Lens.Getter</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Getters
</a></li><li><a href="#g:2">Building Getters
</a></li><li><a href="#g:3">Combinators for Getters and Folds
</a></li><li><a href="#g:4">Storing Getters
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>A <code><code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c</code> is just any function <code>(a -> c)</code>, which we've flipped
into continuation passing style, <code>(c -> r) -> a -> r</code> and decorated
with <code><a href="Control-Lens-Internal.html#t:Accessor">Accessor</a></code> to obtain:
</p><pre>type <code><a href="Control-Lens-Getter.html#t:Getting">Getting</a></code> r a c = (c -> <code><a href="Control-Lens-Internal.html#t:Accessor">Accessor</a></code> r c) -> a -> <code><a href="Control-Lens-Internal.html#t:Accessor">Accessor</a></code> r a</pre><p>If we restrict access to knowledge about the type <code>r</code> and can work for
any d and b, we could get:
</p><pre>type <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c = forall r. <code><a href="Control-Lens-Getter.html#t:Getting">Getting</a></code> r a c</pre><p>But we actually hide the use of <code><a href="Control-Lens-Internal.html#t:Accessor">Accessor</a></code> behind a class <code><a href="Control-Lens-Internal.html#t:Gettable">Gettable</a></code>
to error messages from type class resolution rather than at unification
time, where they are much uglier.
</p><pre>type <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c = forall f. <code><a href="Control-Lens-Internal.html#t:Gettable">Gettable</a></code> f => (c -> f c) -> a -> f a</pre><p>Everything you can do with a function, you can do with a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code>, but
note that because of the continuation passing style (<code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Prelude.html#v:.">.</a></code>) composes them
in the opposite order.
</p><p>Since it is only a function, every <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> obviously only retrieves a
single value for a given input.
</p></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"><span class="keyword">type</span> <a href="#t:Getter">Getter</a> a c = <span class="keyword">forall</span> f. <a href="Control-Lens-Internal.html#t:Gettable">Gettable</a> f => (c -> f c) -> a -> f a</li><li class="src short"><span class="keyword">type</span> <a href="#t:Getting">Getting</a> r a c = (c -> <a href="Control-Lens-Internal.html#t:Accessor">Accessor</a> r c) -> a -> <a href="Control-Lens-Internal.html#t:Accessor">Accessor</a> r a</li><li class="src short"><a href="#v:to">to</a> :: (a -> c) -> <a href="Control-Lens-Getter.html#t:Getter">Getter</a> a c</li><li class="src short"><a href="#v:-94-.">(^.)</a> :: a -> <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> c</li><li class="src short"><a href="#v:-94--36-">(^$)</a> :: <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> a -> c</li><li class="src short"><a href="#v:view">view</a> :: <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> a -> c</li><li class="src short"><a href="#v:views">views</a> :: <a href="Control-Lens-Getter.html#t:Getting">Getting</a> m a c -> (c -> m) -> a -> m</li><li class="src short"><a href="#v:use">use</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> m c</li><li class="src short"><a href="#v:uses">uses</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> e a c -> (c -> e) -> m e</li><li class="src short"><a href="#v:query">query</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> m c</li><li class="src short"><a href="#v:queries">queries</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> e a c -> (c -> e) -> m e</li><li class="src short"><span class="keyword">newtype</span> <a href="#t:ReifiedGetter">ReifiedGetter</a> a c = <a href="#v:ReifyGetter">ReifyGetter</a> {<ul class="subs"><li><a href="#v:reflectGetter">reflectGetter</a> :: <a href="Control-Lens-Getter.html#t:Getter">Getter</a> a c</li></ul>}</li></ul></div><div id="interface"><h1 id="g:1">Getters
</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Getter" class="def">Getter</a> a c = <span class="keyword">forall</span> f. <a href="Control-Lens-Internal.html#t:Gettable">Gettable</a> f => (c -> f c) -> a -> f a<a href="src/Control-Lens-Getter.html#Getter" class="link">Source</a></p><div class="doc"><p>A <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> describes how to retrieve a single value in a way that can be
composed with other lens-like constructions.
</p><p>Unlike a <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> is read-only. Since a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code>
cannot be used to write back there are no lens laws that can be applied to
it. In fact, it is isomorphic to an arbitrary function from <code>(a -> c)</code>.
</p><p>Moreover, a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> can be used directly as a <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code>,
since it just ignores the <code>Applicative</code>.
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Getting" class="def">Getting</a> r a c = (c -> <a href="Control-Lens-Internal.html#t:Accessor">Accessor</a> r c) -> a -> <a href="Control-Lens-Internal.html#t:Accessor">Accessor</a> r a<a href="src/Control-Lens-Getter.html#Getting" class="link">Source</a></p><div class="doc"><p>Most <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> combinators are able to be used with both a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> or a
<code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> in limited situations, to do so, they need to be
monomorphic in what we are going to extract with <code>Const</code>. To be compatible
with <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>, <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> and
<code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> we also restricted choices of the irrelevant <code>b</code> and
<code>d</code> parameters.
</p><p>If a function accepts a <code><code><a href="Control-Lens-Getter.html#t:Getting">Getting</a></code> r a c</code>, then when <code>r</code> is a <code>Monoid</code>, then
you can pass a <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> (or
<code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code>), otherwise you can only pass this a
<code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> or <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>.
</p></div></div><h1 id="g:2">Building Getters
</h1><div class="top"><p class="src"><a name="v:to" class="def">to</a> :: (a -> c) -> <a href="Control-Lens-Getter.html#t:Getter">Getter</a> a c<a href="src/Control-Lens-Getter.html#to" class="link">Source</a></p><div class="doc"><p>Build a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> from an arbitrary Haskell function.
</p><pre><code><a href="Control-Lens-Getter.html#v:to">to</a></code> f . <code><a href="Control-Lens-Getter.html#v:to">to</a></code> g = <code><a href="Control-Lens-Getter.html#v:to">to</a></code> (g . f)</pre><pre>a <code><a href="Control-Lens-Getter.html#v:-94-.">^.</a></code> <code><a href="Control-Lens-Getter.html#v:to">to</a></code> f = f a</pre><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>import Control.Lens
</code></strong><code class="prompt">>>> </code><strong class="userinput"><code>(0, -5)^._2.to abs
</code></strong>5
</pre></div></div><h1 id="g:3">Combinators for Getters and Folds
</h1><div class="top"><p class="src"><a name="v:-94-." class="def">(^.)</a> :: a -> <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> c<a href="src/Control-Lens-Getter.html#%5E." class="link">Source</a></p><div class="doc"><p>View the value pointed to by a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> or <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> or the
result of folding over all the results of a <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or
<code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> that points at a monoidal values.
</p><p>This is the same operation as <code><a href="Control-Lens-Getter.html#v:view">view</a></code> with the arguments flipped.
</p><p>The fixity and semantics are such that subsequent field accesses can be
performed with (<code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Prelude.html#v:.">.</a></code>)
</p><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>:m + Data.Complex Control.Lens
</code></strong><code class="prompt">>>> </code><strong class="userinput"><code>((0, 1 :+ 2), 3)^._1._2.to magnitude
</code></strong>2.23606797749979
</pre><pre>
(<code><a href="Control-Lens-Getter.html#v:-94-.">^.</a></code>) :: a -> <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> c
(<code><a href="Control-Lens-Getter.html#v:-94-.">^.</a></code>) :: <code>Monoid</code> m => a -> <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a m -> m
(<code><a href="Control-Lens-Getter.html#v:-94-.">^.</a></code>) :: a -> <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> c
(<code><a href="Control-Lens-Getter.html#v:-94-.">^.</a></code>) :: a -> <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> c
(<code><a href="Control-Lens-Getter.html#v:-94-.">^.</a></code>) :: <code>Monoid</code> m => a -> <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a m -> m
</pre></div></div><div class="top"><p class="src"><a name="v:-94--36-" class="def">(^$)</a> :: <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> a -> c<a href="src/Control-Lens-Getter.html#%5E%24" class="link">Source</a></p><div class="doc"><p>View the value pointed to by a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code>, <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> or
<code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> or the result of folding over all the results of a
<code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> that points
at a monoidal values.
</p><p>This is the same operation as <code><a href="Control-Lens-Getter.html#v:view">view</a></code>, only infix.
</p><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>import Control.Lens
</code></strong><code class="prompt">>>> </code><strong class="userinput"><code>_2 ^$ (1, "hello")
</code></strong>"hello"
</pre><pre>
(<code><a href="Control-Lens-Getter.html#v:-94--36-">^$</a></code>) :: <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> a -> c
(<code><a href="Control-Lens-Getter.html#v:-94--36-">^$</a></code>) :: <code>Monoid</code> m => <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a m -> a -> m
(<code><a href="Control-Lens-Getter.html#v:-94--36-">^$</a></code>) :: <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> a -> c
(<code><a href="Control-Lens-Getter.html#v:-94--36-">^$</a></code>) :: <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> a -> c
(<code><a href="Control-Lens-Getter.html#v:-94--36-">^$</a></code>) :: <code>Monoid</code> m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a m -> a -> m
</pre></div></div><div class="top"><p class="src"><a name="v:view" class="def">view</a> :: <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> a -> c<a href="src/Control-Lens-Getter.html#view" class="link">Source</a></p><div class="doc"><p>View the value pointed to by a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code>, <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> or
<code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> or the result of folding over all the results of a
<code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> that points
at a monoidal values.
</p><pre><code><a href="Control-Lens-Getter.html#v:view">view</a></code> . <code><a href="Control-Lens-Getter.html#v:to">to</a></code> = <code><a href="/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/share/doc/ghc/html/libraries/base-4.5.0.0/Prelude.html#v:id">id</a></code></pre><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>import Control.Lens
</code></strong><code class="prompt">>>> </code><strong class="userinput"><code>view _2 (1,"hello")
</code></strong>"hello"
</pre><p>It may be useful to think of <code><a href="Control-Lens-Getter.html#v:view">view</a></code> as having these more restrictive
signatures:
</p><pre>
<code><a href="Control-Lens-Getter.html#v:view">view</a></code> :: <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> a -> c
<code><a href="Control-Lens-Getter.html#v:view">view</a></code> :: <code>Monoid</code> m => <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a m -> a -> m
<code><a href="Control-Lens-Getter.html#v:view">view</a></code> :: <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> a -> c
<code><a href="Control-Lens-Getter.html#v:view">view</a></code> :: <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> a -> c
<code><a href="Control-Lens-Getter.html#v:view">view</a></code> :: <code>Monoid</code> m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a m -> a -> m
</pre></div></div><div class="top"><p class="src"><a name="v:views" class="def">views</a> :: <a href="Control-Lens-Getter.html#t:Getting">Getting</a> m a c -> (c -> m) -> a -> m<a href="src/Control-Lens-Getter.html#views" class="link">Source</a></p><div class="doc"><p>View the value of a <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code>, <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code>,
<code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> or the result of folding over the result of mapping
the targets of a <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or
<code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code>.
</p><p>It may be useful to think of <code><a href="Control-Lens-Getter.html#v:views">views</a></code> as having these more restrictive
signatures:
</p><pre class="screen"><code class="prompt">>>> </code><strong class="userinput"><code>import Control.Lens
</code></strong><code class="prompt">>>> </code><strong class="userinput"><code>views _2 length (1,"hello")
</code></strong>5
</pre><pre>
<code><a href="Control-Lens-Getter.html#v:views">views</a></code> :: <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> (c -> d) -> a -> d
<code><a href="Control-Lens-Getter.html#v:views">views</a></code> :: <code>Monoid</code> m => <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a c -> (c -> m) -> a -> m
<code><a href="Control-Lens-Getter.html#v:views">views</a></code> :: <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> (c -> d) -> a -> d
<code><a href="Control-Lens-Getter.html#v:views">views</a></code> :: <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> (c -> d) -> a -> d
<code><a href="Control-Lens-Getter.html#v:views">views</a></code> :: <code>Monoid</code> m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a c -> (c -> m) -> a -> m
</pre></div></div><div class="top"><p class="src"><a name="v:use" class="def">use</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> m c<a href="src/Control-Lens-Getter.html#use" class="link">Source</a></p><div class="doc"><p>Use the target of a <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>, <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code>, or
<code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> in the current state, or use a summary of a
<code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> that points
to a monoidal value.
</p><pre>
<code><a href="Control-Lens-Getter.html#v:use">use</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m => <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> m c
<code><a href="Control-Lens-Getter.html#v:use">use</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m, <code>Monoid</code> r) => <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a r -> m r
<code><a href="Control-Lens-Getter.html#v:use">use</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> m c
<code><a href="Control-Lens-Getter.html#v:use">use</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> m c
<code><a href="Control-Lens-Getter.html#v:use">use</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m, <code>Monoid</code> r) => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a r -> m r
</pre></div></div><div class="top"><p class="src"><a name="v:uses" class="def">uses</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> e a c -> (c -> e) -> m e<a href="src/Control-Lens-Getter.html#uses" class="link">Source</a></p><div class="doc"><p>Use the target of a <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>, <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> or
<code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> in the current state, or use a summary of a
<code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> that
points to a monoidal value.
</p><pre>
<code><a href="Control-Lens-Getter.html#v:uses">uses</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m => <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> (c -> e) -> m e
<code><a href="Control-Lens-Getter.html#v:uses">uses</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m, <code>Monoid</code> r) => <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a c -> (c -> r) -> m r
<code><a href="Control-Lens-Getter.html#v:uses">uses</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> (c -> e) -> m e
<code><a href="Control-Lens-Getter.html#v:uses">uses</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> (c -> e) -> m e
<code><a href="Control-Lens-Getter.html#v:uses">uses</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-State-Class.html#t:MonadState">MonadState</a></code> a m, <code>Monoid</code> r) => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a c -> (c -> r) -> m r
</pre></div></div><div class="top"><p class="src"><a name="v:query" class="def">query</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> c a c -> m c<a href="src/Control-Lens-Getter.html#query" class="link">Source</a></p><div class="doc"><p>Query the target of a <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>, <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> or
<code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> in the current state, or use a summary of a
<code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> that points
to a monoidal value.
</p><pre>
<code><a href="Control-Lens-Getter.html#v:query">query</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m => <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> m c
<code><a href="Control-Lens-Getter.html#v:query">query</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m, <code>Monoid</code> c) => <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a c -> m c
<code><a href="Control-Lens-Getter.html#v:query">query</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> m c
<code><a href="Control-Lens-Getter.html#v:query">query</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> m c
<code><a href="Control-Lens-Getter.html#v:query">query</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m, <code>Monoid</code> c) => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a c -> m c
</pre></div></div><div class="top"><p class="src"><a name="v:queries" class="def">queries</a> :: <a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a> a m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> e a c -> (c -> e) -> m e<a href="src/Control-Lens-Getter.html#queries" class="link">Source</a></p><div class="doc"><p>Use the target of a <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code>, <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> or
<code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> in the current state, or use a summary of a
<code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> or <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> that points
to a monoidal value.
</p><pre>
<code><a href="Control-Lens-Getter.html#v:queries">queries</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m => <code><a href="Control-Lens-Getter.html#t:Getter">Getter</a></code> a c -> (c -> e) -> m e
<code><a href="Control-Lens-Getter.html#v:queries">queries</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m, <code>Monoid</code> c) => <code><a href="Control-Lens-Fold.html#t:Fold">Fold</a></code> a c -> (c -> e) -> m e
<code><a href="Control-Lens-Getter.html#v:queries">queries</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Iso.html#t:Iso">Iso</a></code> a c -> (c -> e) -> m e
<code><a href="Control-Lens-Getter.html#v:queries">queries</a></code> :: <code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Type.html#t:Lens">Lens</a></code> a c -> (c -> e) -> m e
<code><a href="Control-Lens-Getter.html#v:queries">queries</a></code> :: (<code><a href="/Library/Haskell/ghc-7.4.1/lib/mtl-2.1.1/doc/html/Control-Monad-Reader-Class.html#t:MonadReader">MonadReader</a></code> a m, <code>Monoid</code> c) => <code><a href="Control-Lens-Type.html#t:Simple">Simple</a></code> <code><a href="Control-Lens-Traversal.html#t:Traversal">Traversal</a></code> a c -> (c -> e) -> m e
</pre></div></div><h1 id="g:4">Storing Getters
</h1><div class="top"><p class="src"><span class="keyword">newtype</span> <a name="t:ReifiedGetter" class="def">ReifiedGetter</a> a c <a href="src/Control-Lens-Getter.html#ReifiedGetter" class="link">Source</a></p><div class="doc"><p>Useful for storing getters in containers.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ReifyGetter" class="def">ReifyGetter</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:reflectGetter" class="def">reflectGetter</a> :: <a href="Control-Lens-Getter.html#t:Getter">Getter</a> a c</dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.10.0</p></div></body></html>