/usr/share/doc/libghc-lens-doc/html/Control-Monad-Error-Lens.html is in libghc-lens-doc 4.15.4-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 | <!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.Monad.Error.Lens</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script src="file:///usr/share/javascript/mathjax/MathJax.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Control-Monad-Error-Lens.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Control-Monad-Error-Lens.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.15.4: Lenses, Folds and Traversals</p></div><div id="content"><div id="module-header"><table class="info"><tr><th valign="top">Copyright</th><td>(C) 2014-2016 Edward Kmett</td></tr><tr><th>License</th><td>BSD-style (see the file LICENSE)</td></tr><tr><th>Maintainer</th><td>Edward Kmett <ekmett@gmail.com></td></tr><tr><th>Stability</th><td>provisional</td></tr><tr><th>Portability</th><td>Control.Monad.Error</td></tr><tr><th>Safe Haskell</th><td>Safe</td></tr><tr><th>Language</th><td>Haskell98</td></tr></table><p class="caption">Control.Monad.Error.Lens</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Catching</a></li><li><a href="#g:2">Handling</a></li><li><a href="#g:3">Trying</a></li><li><a href="#g:4">Handlers</a></li><li><a href="#g:5">Throwing</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc empty"> </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:catching">catching</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> (a -> m r) -> m r</li><li class="src short"><a href="#v:catching_">catching_</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> m r -> m r</li><li class="src short"><a href="#v:handling">handling</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> (a -> m r) -> m r -> m r</li><li class="src short"><a href="#v:handling_">handling_</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> m r -> m r</li><li class="src short"><a href="#v:trying">trying</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> m (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a> a r)</li><li class="src short"><a href="#v:catches">catches</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => m a -> [<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a] -> m a</li><li class="src short"><span class="keyword">data</span> <a href="#t:Handler">Handler</a> e m r = <a href="#v:Handler">Handler</a> (e -> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a) (a -> m r)</li><li class="src short"><span class="keyword">class</span> <a href="#t:Handleable">Handleable</a> e m h | h -> e m <span class="keyword">where</span><ul class="subs"></ul></li><li class="src short"><a href="#v:throwing">throwing</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Type.html#t:AReview">AReview</a> e t -> t -> m x</li><li class="src short"><a href="#v:throwing_">throwing_</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Type.html#t:AReview">AReview</a> e () -> m x</li></ul></div><div id="interface"><h1 id="g:1">Catching</h1><div class="top"><p class="src"><a id="v:catching" class="def">catching</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> (a -> m r) -> m r <a href="src/Control-Monad-Error-Lens.html#catching" class="link">Source</a> <a href="#v:catching" class="selflink">#</a></p><div class="doc"><p>Catch exceptions that match a given <code><a href="Control-Lens-Type.html#t:Prism">Prism</a></code> (or any <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code>, really).</p><pre><code><a href="Control-Monad-Error-Lens.html#v:catching">catching</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Prism-39-">Prism'</a></code> e a -> m r -> (a -> m r) -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching">catching</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> e a -> m r -> (a -> m r) -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching">catching</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Traversal-39-">Traversal'</a></code> e a -> m r -> (a -> m r) -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching">catching</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Iso-39-">Iso'</a></code> e a -> m r -> (a -> m r) -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching">catching</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> e a -> m r -> (a -> m r) -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching">catching</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> e a -> m r -> (a -> m r) -> m r
</pre></div></div><div class="top"><p class="src"><a id="v:catching_" class="def">catching_</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> m r -> m r <a href="src/Control-Monad-Error-Lens.html#catching_" class="link">Source</a> <a href="#v:catching_" class="selflink">#</a></p><div class="doc"><p>Catch exceptions that match a given <code><a href="Control-Lens-Type.html#t:Prism">Prism</a></code> (or any <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code>), discarding
the information about the match. This is particuarly useful when you have
a <code><code><a href="Control-Lens-Type.html#t:Prism-39-">Prism'</a></code> e ()</code> where the result of the <code><a href="Control-Lens-Type.html#t:Prism">Prism</a></code> or <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> isn't
particularly valuable, just the fact that it matches.</p><pre><code><a href="Control-Monad-Error-Lens.html#v:catching_">catching_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Prism-39-">Prism'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching_">catching_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching_">catching_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Traversal-39-">Traversal'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching_">catching_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Iso-39-">Iso'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching_">catching_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:catching_">catching_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> e a -> m r -> m r -> m r
</pre></div></div><h1 id="g:2">Handling</h1><div class="top"><p class="src"><a id="v:handling" class="def">handling</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> (a -> m r) -> m r -> m r <a href="src/Control-Monad-Error-Lens.html#handling" class="link">Source</a> <a href="#v:handling" class="selflink">#</a></p><div class="doc"><p>A version of <code><a href="Control-Monad-Error-Lens.html#v:catching">catching</a></code> with the arguments swapped around; useful in
situations where the code for the handler is shorter.</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Prism-39-">Prism'</a></code> e a -> (a -> m r) -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> e a -> (a -> m r) -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Traversal-39-">Traversal'</a></code> e a -> (a -> m r) -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Iso-39-">Iso'</a></code> e a -> (a -> m r) -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> e a -> (a -> m r) -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> e a -> (a -> m r) -> m r -> m r
</pre></div></div><div class="top"><p class="src"><a id="v:handling_" class="def">handling_</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> m r -> m r <a href="src/Control-Monad-Error-Lens.html#handling_" class="link">Source</a> <a href="#v:handling_" class="selflink">#</a></p><div class="doc"><p>A version of <code><a href="Control-Monad-Error-Lens.html#v:catching_">catching_</a></code> with the arguments swapped around; useful in
situations where the code for the handler is shorter.</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handling_">handling_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Prism-39-">Prism'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling_">handling_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling_">handling_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Traversal-39-">Traversal'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling_">handling_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Iso-39-">Iso'</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling_">handling_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> e a -> m r -> m r -> m r
<code><a href="Control-Monad-Error-Lens.html#v:handling_">handling_</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> e a -> m r -> m r -> m r
</pre></div></div><h1 id="g:3">Trying</h1><div class="top"><p class="src"><a id="v:trying" class="def">trying</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> m (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a> a r) <a href="src/Control-Monad-Error-Lens.html#trying" class="link">Source</a> <a href="#v:trying" class="selflink">#</a></p><div class="doc"><p><code><a href="Control-Monad-Error-Lens.html#v:trying">trying</a></code> takes a <code><a href="Control-Lens-Type.html#t:Prism">Prism</a></code> (or any <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code>) to select which exceptions are caught
If the <code>Exception</code> does not match the predicate, it is re-thrown.</p><pre><code><a href="Control-Monad-Error-Lens.html#v:trying">trying</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Prism-39-">Prism'</a></code> e a -> m r -> m (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a></code> a r)
<code><a href="Control-Monad-Error-Lens.html#v:trying">trying</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Lens-39-">Lens'</a></code> e a -> m r -> m (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a></code> a r)
<code><a href="Control-Monad-Error-Lens.html#v:trying">trying</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Traversal-39-">Traversal'</a></code> e a -> m r -> m (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a></code> a r)
<code><a href="Control-Monad-Error-Lens.html#v:trying">trying</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Iso-39-">Iso'</a></code> e a -> m r -> m (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a></code> a r)
<code><a href="Control-Monad-Error-Lens.html#v:trying">trying</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> e a -> m r -> m (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a></code> a r)
<code><a href="Control-Monad-Error-Lens.html#v:trying">trying</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> e a -> m r -> m (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Either.html#t:Either">Either</a></code> a r)
</pre></div></div><h1 id="g:4">Handlers</h1><div class="top"><p class="src"><a id="v:catches" class="def">catches</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => m a -> [<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a] -> m a <a href="src/Control-Monad-Error-Lens.html#catches" class="link">Source</a> <a href="#v:catches" class="selflink">#</a></p><div class="doc"><p>This function exists to remedy a gap between the functionality of <code>Control.Exception</code>
and <code>Control.Monad.Error</code>. <code>Control.Exception</code> supplies <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#v:catches">catches</a></code> and
a notion of <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#v:Handler">Handler</a></code>, which we duplicate here in a form suitable for
working with any <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> instance.</p><p>Sometimes you want to catch two different sorts of error. You could
do something like</p><pre>f = <code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> _Foo handleFoo (<code><a href="Control-Monad-Error-Lens.html#v:handling">handling</a></code> _Bar handleBar expr)
</pre><p>However, there are a couple of problems with this approach. The first is
that having two exception handlers is inefficient. However, the more
serious issue is that the second exception handler will catch exceptions
in the first, e.g. in the example above, if <code>handleFoo</code> uses <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#v:throwError">throwError</a></code>
then the second exception handler will catch it.</p><p>Instead, we provide a function <code><a href="Control-Monad-Error-Lens.html#v:catches">catches</a></code>, which would be used thus:</p><pre>f = <code><a href="Control-Monad-Error-Lens.html#v:catches">catches</a></code> expr [ <code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> _Foo handleFoo
, <code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> _Bar handleBar
]
</pre></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:Handler" class="def">Handler</a> e m r <a href="src/Control-Monad-Error-Lens.html#Handler" class="link">Source</a> <a href="#t:Handler" class="selflink">#</a></p><div class="doc"><p>You need this when using <code><a href="Control-Monad-Error-Lens.html#v:catches">catches</a></code>.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:Handler" class="def">Handler</a> (e -> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a) (a -> m r)</td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:Handler" class="caption collapser" onclick="toggleSection('i:Handler')">Instances</p><div id="section.i:Handler" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Handler:Handleable:1" class="instance expander" onclick="toggleSection('i:id:Handler:Handleable:1')"></span> <a href="Control-Monad-Error-Lens.html#t:Handleable">Handleable</a> e m (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m)</span> <a href="src/Control-Monad-Error-Lens.html#line-201" class="link">Source</a> <a href="#t:Handler" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Handler:Handleable:1" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:handler">handler</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> (a -> m r) -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m r <a href="src/Control-Lens-Internal-Exception.html#handler" class="link">Source</a> <a href="#v:handler" class="selflink">#</a></p><p class="src"><a href="#v:handler_">handler_</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m r <a href="src/Control-Lens-Internal-Exception.html#handler_" class="link">Source</a> <a href="#v:handler_" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Handler:Functor:2" class="instance expander" onclick="toggleSection('i:id:Handler:Functor:2')"></span> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Functor.html#t:Functor">Functor</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m)</span> <a href="src/Control-Monad-Error-Lens.html#line-175" class="link">Source</a> <a href="#t:Handler" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Handler:Functor:2" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fmap">fmap</a> :: (a -> b) -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m b <a href="#v:fmap" class="selflink">#</a></p><p class="src"><a href="#v:-60--36-">(<$)</a> :: a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m b -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:-60--36-" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Handler:Plus:3" class="instance expander" onclick="toggleSection('i:id:Handler:Plus:3')"></span> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/share/doc/libghc-semigroupoids-doc/html/Data-Functor-Plus.html#t:Plus">Plus</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m)</span> <a href="src/Control-Monad-Error-Lens.html#line-191" class="link">Source</a> <a href="#t:Handler" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Handler:Plus:3" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:zero">zero</a> :: <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:zero" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Handler:Alt:4" class="instance expander" onclick="toggleSection('i:id:Handler:Alt:4')"></span> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/share/doc/libghc-semigroupoids-doc/html/Data-Functor-Alt.html#t:Alt">Alt</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m)</span> <a href="src/Control-Monad-Error-Lens.html#line-185" class="link">Source</a> <a href="#t:Handler" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Handler:Alt:4" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-60--33--62-">(<!>)</a> :: <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:-60--33--62-" class="selflink">#</a></p><p class="src"><a href="#v:some">some</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m) => <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m [a] <a href="#v:some" class="selflink">#</a></p><p class="src"><a href="#v:many">many</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m) => <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m [a] <a href="#v:many" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Handler:Semigroup:5" class="instance expander" onclick="toggleSection('i:id:Handler:Semigroup:5')"></span> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Semigroup.html#t:Semigroup">Semigroup</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a)</span> <a href="src/Control-Monad-Error-Lens.html#line-181" class="link">Source</a> <a href="#t:Handler" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Handler:Semigroup:5" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-60--62-">(<>)</a> :: <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:-60--62-" class="selflink">#</a></p><p class="src"><a href="#v:sconcat">sconcat</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-List-NonEmpty.html#t:NonEmpty">NonEmpty</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a) -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:sconcat" class="selflink">#</a></p><p class="src"><a href="#v:stimes">stimes</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Prelude.html#t:Integral">Integral</a> b => b -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:stimes" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:id:Handler:Monoid:6" class="instance expander" onclick="toggleSection('i:id:Handler:Monoid:6')"></span> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Monad.html#t:Monad">Monad</a> m => <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:Monoid">Monoid</a> (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a)</span> <a href="src/Control-Monad-Error-Lens.html#line-195" class="link">Source</a> <a href="#t:Handler" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:id:Handler:Monoid:6" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:mempty">mempty</a> :: <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:mempty" class="selflink">#</a></p><p class="src"><a href="#v:mappend">mappend</a> :: <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:mappend" class="selflink">#</a></p><p class="src"><a href="#v:mconcat">mconcat</a> :: [<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a] -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m a <a href="#v:mconcat" class="selflink">#</a></p></div></div></td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a id="t:Handleable" class="def">Handleable</a> e m h | h -> e m <span class="keyword">where</span> <a href="src/Control-Lens-Internal-Exception.html#Handleable" class="link">Source</a> <a href="#t:Handleable" class="selflink">#</a></p><div class="doc"><p>Both <code>exceptions</code> and <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html">Control.Exception</a> provide a <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#v:Handler">Handler</a></code> type.</p><p>This lets us write combinators to build handlers that are agnostic about the choice of
which of these they use.</p></div><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src"><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a id="v:handler" class="def">handler</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> (a -> m r) -> h r <a href="src/Control-Lens-Internal-Exception.html#handler" class="link">Source</a> <a href="#v:handler" class="selflink">#</a></p><div class="doc"><p>This builds a <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#v:Handler">Handler</a></code> for just the targets of a given <code><a href="Control-Lens-Type.html#v:Prism">Prism</a></code> (or any <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code>, really).</p><pre><code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#v:catches">catches</a></code> ... [ <code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> <code><a href="Control-Exception-Lens.html#v:_AssertionFailed">_AssertionFailed</a></code> (s -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#v:print">print</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Function.html#v:-36-">$</a></code> "Assertion Failed\n" <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/GHC-OldList.html#v:-43--43-">++</a></code> s)
, <code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> <code><a href="Control-Exception-Lens.html#v:_ErrorCall">_ErrorCall</a></code> (s -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#v:print">print</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Function.html#v:-36-">$</a></code> "Error\n" <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/GHC-OldList.html#v:-43--43-">++</a></code> s)
]
</pre><p>This works ith both the <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> type provided by <code>Control.Exception</code>:</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r) -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r) -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Prism.html#v:Prism-39-">Prism'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r) -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Lens.html#v:Lens-39-">Lens'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r) -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Traversal.html#v:Traversal-39-">Traversal'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r) -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
</pre><p>and with the <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> type provided by <code>Control.Monad.Catch</code>:</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> m r) -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> m r) -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Prism.html#v:Prism-39-">Prism'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> m r) -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Lens.html#v:Lens-39-">Lens'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> m r) -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Traversal.html#v:Traversal-39-">Traversal'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> (a -> m r) -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
</pre><p>and with the <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> type provided by <code>Control.Monad.Error.Lens</code>:</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> e a -> (a -> m r) -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> e a -> (a -> m r) -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Prism.html#v:Prism-39-">Prism'</a></code> e a -> (a -> m r) -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Lens.html#v:Lens-39-">Lens'</a></code> e a -> (a -> m r) -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler">handler</a></code> :: <code><a href="Control-Lens-Traversal.html#v:Traversal-39-">Traversal'</a></code> e a -> (a -> m r) -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
</pre></div><p class="src"><a id="v:handler_" class="def">handler_</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> h r <a href="src/Control-Lens-Internal-Exception.html#handler_" class="link">Source</a> <a href="#v:handler_" class="selflink">#</a></p><div class="doc"><p>This builds a <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#v:Handler">Handler</a></code> for just the targets of a given <code><a href="Control-Lens-Prism.html#v:Prism">Prism</a></code> (or any <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code>, really).
that ignores its input and just recovers with the stated monadic action.</p><pre><code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#v:catches">catches</a></code> ... [ <code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> <code><a href="Control-Exception-Lens.html#v:_NonTermination">_NonTermination</a></code> (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Monad.html#v:return">return</a></code> "looped")
, <code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> <code><a href="Control-Exception-Lens.html#v:_StackOverflow">_StackOverflow</a></code> (<code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Monad.html#v:return">return</a></code> "overflow")
]
</pre><p>This works with the <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> type provided by <code>Control.Exception</code>:</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Prism.html#v:Prism-39-">Prism'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Lens.html#v:Lens-39-">Lens'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Traversal.html#v:Traversal-39-">Traversal'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a></code> r -> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></code> r
</pre><p>and with the <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> type provided by <code>Control.Monad.Catch</code>:</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> m r -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> m r -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Prism.html#v:Prism-39-">Prism'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> m r -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Lens.html#v:Lens-39-">Lens'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> m r -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Traversal.html#v:Traversal-39-">Traversal'</a></code> <code><a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a></code> a -> m r -> <code><a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a></code> m r
</pre><p>and with the <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> type provided by <code>Control.Monad.Error.Lens</code>:</p><pre><code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Type.html#t:Getter">Getter</a></code> e a -> m r -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Type.html#t:Fold">Fold</a></code> e a -> m r -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Prism.html#v:Prism-39-">Prism'</a></code> e a -> m r -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Lens.html#v:Lens-39-">Lens'</a></code> e a -> m r -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
<code><a href="Control-Monad-Error-Lens.html#v:handler_">handler_</a></code> :: <code><a href="Control-Lens-Traversal.html#v:Traversal-39-">Traversal'</a></code> e a -> m r -> <code><a href="Control-Monad-Error-Lens.html#v:Handler">Handler</a></code> e m r
</pre></div></div><div class="subs instances"><p id="control.i:Handleable" class="caption collapser" onclick="toggleSection('i:Handleable')">Instances</p><div id="section.i:Handleable" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:ic:Handleable:Handleable:1" class="instance expander" onclick="toggleSection('i:ic:Handleable:Handleable:1')"></span> <a href="Control-Monad-Error-Lens.html#t:Handleable">Handleable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a></span> <a href="src/Control-Lens-Internal-Exception.html#line-140" class="link">Source</a> <a href="#t:Handleable" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:ic:Handleable:Handleable:1" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:handler">handler</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a> a -> (a -> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a> r) -> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a> r <a href="src/Control-Lens-Internal-Exception.html#handler" class="link">Source</a> <a href="#v:handler" class="selflink">#</a></p><p class="src"><a href="#v:handler_">handler_</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a> a -> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/System-IO.html#t:IO">IO</a> r -> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception.html#t:Handler">Handler</a> r <a href="src/Control-Lens-Internal-Exception.html#handler_" class="link">Source</a> <a href="#v:handler_" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:ic:Handleable:Handleable:2" class="instance expander" onclick="toggleSection('i:ic:Handleable:Handleable:2')"></span> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> -> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a>) m => <a href="Control-Monad-Error-Lens.html#t:Handleable">Handleable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a> m (<a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a> m)</span> <a href="src/Control-Lens-Internal-Exception.html#line-143" class="link">Source</a> <a href="#t:Handleable" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:ic:Handleable:Handleable:2" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:handler">handler</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a> a -> (a -> m r) -> <a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a> m r <a href="src/Control-Lens-Internal-Exception.html#handler" class="link">Source</a> <a href="#v:handler" class="selflink">#</a></p><p class="src"><a href="#v:handler_">handler_</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Control-Exception-Base.html#t:SomeException">SomeException</a> a -> m r -> <a href="file:///usr/share/doc/libghc-exceptions-doc/html/Control-Monad-Catch.html#t:Handler">Handler</a> m r <a href="src/Control-Lens-Internal-Exception.html#handler_" class="link">Source</a> <a href="#v:handler_" class="selflink">#</a></p></div></div></td></tr><tr><td class="src clearfix"><span class="inst-left"><span id="control.i:ic:Handleable:Handleable:3" class="instance expander" onclick="toggleSection('i:ic:Handleable:Handleable:3')"></span> <a href="Control-Monad-Error-Lens.html#t:Handleable">Handleable</a> e m (<a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m)</span> <a href="src/Control-Lens-Internal-Exception.html#line-201" class="link">Source</a> <a href="#t:Handleable" class="selflink">#</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div id="section.i:ic:Handleable:Handleable:3" class="inst-details hide"><div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:handler">handler</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> (a -> m r) -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m r <a href="src/Control-Lens-Internal-Exception.html#handler" class="link">Source</a> <a href="#v:handler" class="selflink">#</a></p><p class="src"><a href="#v:handler_">handler_</a> :: <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Kind.html#t:-42-">*</a> a => <a href="Control-Lens-Getter.html#t:Getting">Getting</a> (<a href="file:///usr/share/doc/ghc-doc/html/libraries/base-4.9.1.0/Data-Monoid.html#t:First">First</a> a) e a -> m r -> <a href="Control-Monad-Error-Lens.html#t:Handler">Handler</a> e m r <a href="src/Control-Lens-Internal-Exception.html#handler_" class="link">Source</a> <a href="#v:handler_" class="selflink">#</a></p></div></div></td></tr></table></div></div></div><h1 id="g:5">Throwing</h1><div class="top"><p class="src"><a id="v:throwing" class="def">throwing</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Type.html#t:AReview">AReview</a> e t -> t -> m x <a href="src/Control-Monad-Error-Lens.html#throwing" class="link">Source</a> <a href="#v:throwing" class="selflink">#</a></p><div class="doc"><p>Throw an <code>Exception</code> described by a <code><a href="Control-Lens-Type.html#t:Prism">Prism</a></code>.</p><pre><code><a href="Control-Monad-Error-Lens.html#v:throwing">throwing</a></code> l ≡ <code><a href="Control-Lens-Review.html#v:reviews">reviews</a></code> l <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#v:throwError">throwError</a></code></pre><pre><code><a href="Control-Monad-Error-Lens.html#v:throwing">throwing</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Prism-39-">Prism'</a></code> e t -> t -> a
<code><a href="Control-Monad-Error-Lens.html#v:throwing">throwing</a></code> :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> e m => <code><a href="Control-Lens-Type.html#t:Iso-39-">Iso'</a></code> e t -> t -> a
</pre></div></div><div class="top"><p class="src"><a id="v:throwing_" class="def">throwing_</a> :: <a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a> e m => <a href="Control-Lens-Type.html#t:AReview">AReview</a> e () -> m x <a href="src/Control-Monad-Error-Lens.html#throwing_" class="link">Source</a> <a href="#v:throwing_" class="selflink">#</a></p><div class="doc"><p>Similar to <code><a href="Control-Monad-Error-Lens.html#v:throwing">throwing</a></code> but specialised for the common case of
error constructors with no arguments.</p><pre>data MyError = Foo | Bar
makePrisms ''MyError
<code><a href="Control-Monad-Error-Lens.html#v:throwing_">throwing_</a></code> _Foo :: <code><a href="file:///usr/share/doc/libghc-mtl-doc/html/Control-Monad-Error-Class.html#t:MonadError">MonadError</a></code> MyError m => m a
</pre></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.17.3</p></div></body></html>
|