This file is indexed.

/usr/share/doc/libghc-lens-doc/html/index.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
<!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>lens-4.13: Lenses, Folds and Traversals</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();};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><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="description"><h1>lens-4.13: Lenses, Folds and Traversals</h1><div class="doc"><p>This package comes &quot;Batteries Included&quot; with many useful lenses for the types
commonly used from the Haskell Platform, and with tools for automatically
generating lenses and isomorphisms for user-supplied data types.</p><p>The combinators in <code>Control.Lens</code> provide a highly generic toolbox for composing
families of getters, folds, isomorphisms, traversals, setters and lenses and their
indexed variants.</p><p>An overview, with a large number of examples can be found in the <a href="https://github.com/ekmett/lens#lens-lenses-folds-and-traversals">README</a>.</p><p>An introductory video on the style of code used in this library by Simon Peyton Jones is available from <a href="http://skillsmatter.com/podcast/scala/lenses-compositional-data-access-and-manipulation">Skills Matter</a>.</p><p>A video on how to use lenses and how they are constructed is available on <a href="http://youtu.be/cefnmjtAolY?hd=1">youtube</a>.</p><p>Slides for that second talk can be obtained from <a href="http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdf">comonad.com</a>.</p><p>More information on the care and feeding of lenses, including a brief tutorial and motivation
for their types can be found on the <a href="https://github.com/ekmett/lens/wiki">lens wiki</a>.</p><p>A small game of <code>pong</code> and other more complex examples that manage their state using lenses can be found in the <a href="https://github.com/ekmett/lens/blob/master/examples/">example folder</a>.</p><p><em>Lenses, Folds and Traversals</em></p><p>With some signatures simplified, the core of the hierarchy of lens-like constructions looks like:</p><p><img src="http://i.imgur.com/ALlbPRa.png" /></p><p><a href="Hierarchy.png">(Local Copy)</a></p><p>You can compose any two elements of the hierarchy above using <code>(.)</code> from the <code>Prelude</code>, and you can
use any element of the hierarchy as any type it linked to above it.</p><p>The result is their lowest upper bound in the hierarchy (or an error if that bound doesn't exist).</p><p>For instance:</p><ul><li>You can use any <code>Traversal</code> as a <code>Fold</code> or as a <code>Setter</code>.</li><li>The composition of a <code>Traversal</code> and a <code>Getter</code> yields a <code>Fold</code>.</li></ul><p><em>Minimizing Dependencies</em></p><p>If you want to provide lenses and traversals for your own types in your own libraries, then you
can do so without incurring a dependency on this (or any other) lens package at all.</p><p><em>e.g.</em> for a data type:</p><pre>data Foo a = Foo Int Int a</pre><p>You can define lenses such as</p><pre>-- bar :: Lens' (Foo a) Int
bar :: Functor f =&gt; (Int -&gt; f Int) -&gt; Foo a -&gt; f (Foo a)
bar f (Foo a b c) = fmap (\a' -&gt; Foo a' b c) (f a)</pre><pre>-- quux :: Lens (Foo a) (Foo b) a b
quux :: Functor f =&gt; (a -&gt; f b) -&gt; Foo a -&gt; f (Foo b)
quux f (Foo a b c) = fmap (Foo a b) (f c)</pre><p>without the need to use any type that isn't already defined in the <code>Prelude</code>.</p><p>And you can define a traversal of multiple fields with <code>Applicative</code>:</p><pre>-- traverseBarAndBaz :: Traversal' (Foo a) Int
traverseBarAndBaz :: Applicative f =&gt; (Int -&gt; f Int) -&gt; Foo a -&gt; f (Foo a)
traverseBarAndBaz f (Foo a b c) = Foo &lt;$&gt; f a &lt;*&gt; f b &lt;*&gt; pure c</pre><p>What is provided in this library is a number of stock lenses and traversals for
common haskell types, a wide array of combinators for working them, and more
exotic functionality, (<em>e.g.</em> getters, setters, indexed folds, isomorphisms).</p></div></div><div id="module-list"><p class="caption">Modules</p><ul><li><span id="control.n.1" class="module collapser" onclick="toggleSection('n.1')">Control</span><ul id="section.n.1" class="show"><li><span id="control.n.1.1" class="module collapser" onclick="toggleSection('n.1.1')">Exception</span><ul id="section.n.1.1" class="show"><li><span class="module"><a href="Control-Exception-Lens.html">Control.Exception.Lens</a></span></li></ul></li><li><span class="module"><span id="control.n.1.2" class="collapser" onclick="toggleSection('n.1.2')">&nbsp;</span><a href="Control-Lens.html">Control.Lens</a></span><ul id="section.n.1.2" class="show"><li><span class="module"><a href="Control-Lens-At.html">Control.Lens.At</a></span></li><li><span class="module"><a href="Control-Lens-Combinators.html">Control.Lens.Combinators</a></span></li><li><span class="module"><a href="Control-Lens-Cons.html">Control.Lens.Cons</a></span></li><li><span class="module"><a href="Control-Lens-Each.html">Control.Lens.Each</a></span></li><li><span class="module"><a href="Control-Lens-Empty.html">Control.Lens.Empty</a></span></li><li><span class="module"><a href="Control-Lens-Equality.html">Control.Lens.Equality</a></span></li><li><span class="module"><a href="Control-Lens-Extras.html">Control.Lens.Extras</a></span></li><li><span class="module"><a href="Control-Lens-Fold.html">Control.Lens.Fold</a></span></li><li><span class="module"><a href="Control-Lens-Getter.html">Control.Lens.Getter</a></span></li><li><span class="module"><a href="Control-Lens-Indexed.html">Control.Lens.Indexed</a></span></li><li><span class="module"><span id="control.n.1.2.11" class="collapser" onclick="toggleSection('n.1.2.11')">&nbsp;</span><a href="Control-Lens-Internal.html">Control.Lens.Internal</a></span><ul id="section.n.1.2.11" class="show"><li><span class="module"><a href="Control-Lens-Internal-Bazaar.html">Control.Lens.Internal.Bazaar</a></span></li><li><span class="module"><a href="Control-Lens-Internal-ByteString.html">Control.Lens.Internal.ByteString</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Coerce.html">Control.Lens.Internal.Coerce</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Context.html">Control.Lens.Internal.Context</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Deque.html">Control.Lens.Internal.Deque</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Exception.html">Control.Lens.Internal.Exception</a></span></li><li><span class="module"><a href="Control-Lens-Internal-FieldTH.html">Control.Lens.Internal.FieldTH</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Fold.html">Control.Lens.Internal.Fold</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Getter.html">Control.Lens.Internal.Getter</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Indexed.html">Control.Lens.Internal.Indexed</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Instances.html">Control.Lens.Internal.Instances</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Iso.html">Control.Lens.Internal.Iso</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Level.html">Control.Lens.Internal.Level</a></span></li><li><span class="module"><a href="Control-Lens-Internal-List.html">Control.Lens.Internal.List</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Magma.html">Control.Lens.Internal.Magma</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Prism.html">Control.Lens.Internal.Prism</a></span></li><li><span class="module"><a href="Control-Lens-Internal-PrismTH.html">Control.Lens.Internal.PrismTH</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Review.html">Control.Lens.Internal.Review</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Setter.html">Control.Lens.Internal.Setter</a></span></li><li><span class="module"><a href="Control-Lens-Internal-TH.html">Control.Lens.Internal.TH</a></span></li><li><span class="module"><a href="Control-Lens-Internal-Zoom.html">Control.Lens.Internal.Zoom</a></span></li></ul></li><li><span class="module"><a href="Control-Lens-Iso.html">Control.Lens.Iso</a></span></li><li><span class="module"><a href="Control-Lens-Lens.html">Control.Lens.Lens</a></span></li><li><span class="module"><a href="Control-Lens-Level.html">Control.Lens.Level</a></span></li><li><span class="module"><a href="Control-Lens-Operators.html">Control.Lens.Operators</a></span></li><li><span class="module"><a href="Control-Lens-Plated.html">Control.Lens.Plated</a></span></li><li><span class="module"><a href="Control-Lens-Prism.html">Control.Lens.Prism</a></span></li><li><span class="module"><a href="Control-Lens-Reified.html">Control.Lens.Reified</a></span></li><li><span class="module"><a href="Control-Lens-Review.html">Control.Lens.Review</a></span></li><li><span class="module"><a href="Control-Lens-Setter.html">Control.Lens.Setter</a></span></li><li><span class="module"><a href="Control-Lens-TH.html">Control.Lens.TH</a></span></li><li><span class="module"><a href="Control-Lens-Traversal.html">Control.Lens.Traversal</a></span></li><li><span class="module"><a href="Control-Lens-Tuple.html">Control.Lens.Tuple</a></span></li><li><span class="module"><a href="Control-Lens-Type.html">Control.Lens.Type</a></span></li><li><span class="module"><a href="Control-Lens-Wrapped.html">Control.Lens.Wrapped</a></span></li><li><span class="module"><a href="Control-Lens-Zoom.html">Control.Lens.Zoom</a></span></li></ul></li><li><span id="control.n.1.3" class="module collapser" onclick="toggleSection('n.1.3')">Monad</span><ul id="section.n.1.3" class="show"><li><span id="control.n.1.3.1" class="module collapser" onclick="toggleSection('n.1.3.1')">Error</span><ul id="section.n.1.3.1" class="show"><li><span class="module"><a href="Control-Monad-Error-Lens.html">Control.Monad.Error.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.1.4" class="module collapser" onclick="toggleSection('n.1.4')">Parallel</span><ul id="section.n.1.4" class="show"><li><span id="control.n.1.4.1" class="module collapser" onclick="toggleSection('n.1.4.1')">Strategies</span><ul id="section.n.1.4.1" class="show"><li><span class="module"><a href="Control-Parallel-Strategies-Lens.html">Control.Parallel.Strategies.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.1.5" class="module collapser" onclick="toggleSection('n.1.5')">Seq</span><ul id="section.n.1.5" class="show"><li><span class="module"><a href="Control-Seq-Lens.html">Control.Seq.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.2" class="module collapser" onclick="toggleSection('n.2')">Data</span><ul id="section.n.2" class="show"><li><span id="control.n.2.1" class="module collapser" onclick="toggleSection('n.2.1')">Array</span><ul id="section.n.2.1" class="show"><li><span class="module"><a href="Data-Array-Lens.html">Data.Array.Lens</a></span></li></ul></li><li><span id="control.n.2.2" class="module collapser" onclick="toggleSection('n.2.2')">Bits</span><ul id="section.n.2.2" class="show"><li><span class="module"><a href="Data-Bits-Lens.html">Data.Bits.Lens</a></span></li></ul></li><li><span id="control.n.2.3" class="module collapser" onclick="toggleSection('n.2.3')">ByteString</span><ul id="section.n.2.3" class="show"><li><span id="control.n.2.3.1" class="module collapser" onclick="toggleSection('n.2.3.1')">Lazy</span><ul id="section.n.2.3.1" class="show"><li><span class="module"><a href="Data-ByteString-Lazy-Lens.html">Data.ByteString.Lazy.Lens</a></span></li></ul></li><li><span class="module"><a href="Data-ByteString-Lens.html">Data.ByteString.Lens</a></span></li><li><span id="control.n.2.3.3" class="module collapser" onclick="toggleSection('n.2.3.3')">Strict</span><ul id="section.n.2.3.3" class="show"><li><span class="module"><a href="Data-ByteString-Strict-Lens.html">Data.ByteString.Strict.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.2.4" class="module collapser" onclick="toggleSection('n.2.4')">Complex</span><ul id="section.n.2.4" class="show"><li><span class="module"><a href="Data-Complex-Lens.html">Data.Complex.Lens</a></span></li></ul></li><li><span id="control.n.2.5" class="module collapser" onclick="toggleSection('n.2.5')">Data</span><ul id="section.n.2.5" class="show"><li><span class="module"><a href="Data-Data-Lens.html">Data.Data.Lens</a></span></li></ul></li><li><span id="control.n.2.6" class="module collapser" onclick="toggleSection('n.2.6')">Dynamic</span><ul id="section.n.2.6" class="show"><li><span class="module"><a href="Data-Dynamic-Lens.html">Data.Dynamic.Lens</a></span></li></ul></li><li><span id="control.n.2.7" class="module collapser" onclick="toggleSection('n.2.7')">HashSet</span><ul id="section.n.2.7" class="show"><li><span class="module"><a href="Data-HashSet-Lens.html">Data.HashSet.Lens</a></span></li></ul></li><li><span id="control.n.2.8" class="module collapser" onclick="toggleSection('n.2.8')">IntSet</span><ul id="section.n.2.8" class="show"><li><span class="module"><a href="Data-IntSet-Lens.html">Data.IntSet.Lens</a></span></li></ul></li><li><span id="control.n.2.9" class="module collapser" onclick="toggleSection('n.2.9')">List</span><ul id="section.n.2.9" class="show"><li><span class="module"><a href="Data-List-Lens.html">Data.List.Lens</a></span></li></ul></li><li><span id="control.n.2.10" class="module collapser" onclick="toggleSection('n.2.10')">Map</span><ul id="section.n.2.10" class="show"><li><span class="module"><a href="Data-Map-Lens.html">Data.Map.Lens</a></span></li></ul></li><li><span id="control.n.2.11" class="module collapser" onclick="toggleSection('n.2.11')">Sequence</span><ul id="section.n.2.11" class="show"><li><span class="module"><a href="Data-Sequence-Lens.html">Data.Sequence.Lens</a></span></li></ul></li><li><span id="control.n.2.12" class="module collapser" onclick="toggleSection('n.2.12')">Set</span><ul id="section.n.2.12" class="show"><li><span class="module"><a href="Data-Set-Lens.html">Data.Set.Lens</a></span></li></ul></li><li><span id="control.n.2.13" class="module collapser" onclick="toggleSection('n.2.13')">Text</span><ul id="section.n.2.13" class="show"><li><span id="control.n.2.13.1" class="module collapser" onclick="toggleSection('n.2.13.1')">Lazy</span><ul id="section.n.2.13.1" class="show"><li><span class="module"><a href="Data-Text-Lazy-Lens.html">Data.Text.Lazy.Lens</a></span></li></ul></li><li><span class="module"><a href="Data-Text-Lens.html">Data.Text.Lens</a></span></li><li><span id="control.n.2.13.3" class="module collapser" onclick="toggleSection('n.2.13.3')">Strict</span><ul id="section.n.2.13.3" class="show"><li><span class="module"><a href="Data-Text-Strict-Lens.html">Data.Text.Strict.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.2.14" class="module collapser" onclick="toggleSection('n.2.14')">Tree</span><ul id="section.n.2.14" class="show"><li><span class="module"><a href="Data-Tree-Lens.html">Data.Tree.Lens</a></span></li></ul></li><li><span id="control.n.2.15" class="module collapser" onclick="toggleSection('n.2.15')">Typeable</span><ul id="section.n.2.15" class="show"><li><span class="module"><a href="Data-Typeable-Lens.html">Data.Typeable.Lens</a></span></li></ul></li><li><span id="control.n.2.16" class="module collapser" onclick="toggleSection('n.2.16')">Vector</span><ul id="section.n.2.16" class="show"><li><span id="control.n.2.16.1" class="module collapser" onclick="toggleSection('n.2.16.1')">Generic</span><ul id="section.n.2.16.1" class="show"><li><span class="module"><a href="Data-Vector-Generic-Lens.html">Data.Vector.Generic.Lens</a></span></li></ul></li><li><span class="module"><a href="Data-Vector-Lens.html">Data.Vector.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.3" class="module collapser" onclick="toggleSection('n.3')">GHC</span><ul id="section.n.3" class="show"><li><span id="control.n.3.1" class="module collapser" onclick="toggleSection('n.3.1')">Generics</span><ul id="section.n.3.1" class="show"><li><span class="module"><a href="GHC-Generics-Lens.html">GHC.Generics.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.4" class="module collapser" onclick="toggleSection('n.4')">Generics</span><ul id="section.n.4" class="show"><li><span id="control.n.4.1" class="module collapser" onclick="toggleSection('n.4.1')">Deriving</span><ul id="section.n.4.1" class="show"><li><span class="module"><a href="Generics-Deriving-Lens.html">Generics.Deriving.Lens</a></span></li></ul></li></ul></li><li><span id="control.n.5" class="module collapser" onclick="toggleSection('n.5')">Language</span><ul id="section.n.5" class="show"><li><span id="control.n.5.1" class="module collapser" onclick="toggleSection('n.5.1')">Haskell</span><ul id="section.n.5.1" class="show"><li><span id="control.n.5.1.1" class="module collapser" onclick="toggleSection('n.5.1.1')">TH</span><ul id="section.n.5.1.1" class="show"><li><span class="module"><a href="Language-Haskell-TH-Lens.html">Language.Haskell.TH.Lens</a></span></li></ul></li></ul></li></ul></li><li><span id="control.n.6" class="module collapser" onclick="toggleSection('n.6')">Numeric</span><ul id="section.n.6" class="show"><li><span class="module"><a href="Numeric-Lens.html">Numeric.Lens</a></span></li></ul></li><li><span id="control.n.7" class="module collapser" onclick="toggleSection('n.7')">System</span><ul id="section.n.7" class="show"><li><span id="control.n.7.1" class="module collapser" onclick="toggleSection('n.7.1')">Exit</span><ul id="section.n.7.1" class="show"><li><span class="module"><a href="System-Exit-Lens.html">System.Exit.Lens</a></span></li></ul></li><li><span id="control.n.7.2" class="module collapser" onclick="toggleSection('n.7.2')">FilePath</span><ul id="section.n.7.2" class="show"><li><span class="module"><a href="System-FilePath-Lens.html">System.FilePath.Lens</a></span></li></ul></li><li><span id="control.n.7.3" class="module collapser" onclick="toggleSection('n.7.3')">IO</span><ul id="section.n.7.3" class="show"><li><span id="control.n.7.3.1" class="module collapser" onclick="toggleSection('n.7.3.1')">Error</span><ul id="section.n.7.3.1" class="show"><li><span class="module"><a href="System-IO-Error-Lens.html">System.IO.Error.Lens</a></span></li></ul></li></ul></li></ul></li></ul></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>