/usr/share/doc/libghc-hspec-core-doc/html/src/Test-Hspec-Core-Util.html is in libghc-hspec-core-doc 2.2.4-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Test/Hspec/Core/Util.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>-- | Stability: unstable</span>
<a name="line-2"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Test</span><span class='hs-varop'>.</span><span class='hs-conid'>Hspec</span><span class='hs-varop'>.</span><span class='hs-conid'>Core</span><span class='hs-varop'>.</span><span class='hs-conid'>Util</span> <span class='hs-layout'>(</span>
<a name="line-3"></a><span class='hs-comment'>-- * String functions</span>
<a name="line-4"></a> <span class='hs-varid'>pluralize</span>
<a name="line-5"></a><span class='hs-layout'>,</span> <span class='hs-varid'>strip</span>
<a name="line-6"></a><span class='hs-layout'>,</span> <span class='hs-varid'>lineBreaksAt</span>
<a name="line-7"></a>
<a name="line-8"></a><span class='hs-comment'>-- * Working with paths</span>
<a name="line-9"></a><span class='hs-layout'>,</span> <span class='hs-conid'>Path</span>
<a name="line-10"></a><span class='hs-layout'>,</span> <span class='hs-varid'>formatRequirement</span>
<a name="line-11"></a><span class='hs-layout'>,</span> <span class='hs-varid'>filterPredicate</span>
<a name="line-12"></a>
<a name="line-13"></a><span class='hs-comment'>-- * Working with exception</span>
<a name="line-14"></a><span class='hs-layout'>,</span> <span class='hs-varid'>safeTry</span>
<a name="line-15"></a><span class='hs-layout'>,</span> <span class='hs-varid'>formatException</span>
<a name="line-16"></a><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-17"></a>
<a name="line-18"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span>
<a name="line-19"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Char</span> <span class='hs-layout'>(</span><span class='hs-varid'>isSpace</span><span class='hs-layout'>)</span>
<a name="line-20"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span>
<a name="line-21"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span>
<a name="line-22"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>Async</span>
<a name="line-23"></a>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Test</span><span class='hs-varop'>.</span><span class='hs-conid'>Hspec</span><span class='hs-varop'>.</span><span class='hs-conid'>Compat</span> <span class='hs-layout'>(</span><span class='hs-varid'>showType</span><span class='hs-layout'>)</span>
<a name="line-25"></a>
<a name="line-26"></a><a name="pluralize"></a><span class='hs-comment'>-- |</span>
<a name="line-27"></a><span class='hs-comment'>-- @pluralize count singular@ pluralizes the given @singular@ word unless given</span>
<a name="line-28"></a><span class='hs-comment'>-- @count@ is 1.</span>
<a name="line-29"></a><span class='hs-comment'>--</span>
<a name="line-30"></a><span class='hs-comment'>-- Examples:</span>
<a name="line-31"></a><span class='hs-comment'>--</span>
<a name="line-32"></a><span class='hs-comment'>-- >>> pluralize 0 "example"</span>
<a name="line-33"></a><span class='hs-comment'>-- "0 examples"</span>
<a name="line-34"></a><span class='hs-comment'>--</span>
<a name="line-35"></a><span class='hs-comment'>-- >>> pluralize 1 "example"</span>
<a name="line-36"></a><span class='hs-comment'>-- "1 example"</span>
<a name="line-37"></a><span class='hs-comment'>--</span>
<a name="line-38"></a><span class='hs-comment'>-- >>> pluralize 2 "example"</span>
<a name="line-39"></a><span class='hs-comment'>-- "2 examples"</span>
<a name="line-40"></a><span class='hs-definition'>pluralize</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-41"></a><span class='hs-definition'>pluralize</span> <span class='hs-num'>1</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"1 "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span>
<a name="line-42"></a><span class='hs-definition'>pluralize</span> <span class='hs-varid'>n</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varid'>n</span> <span class='hs-varop'>++</span> <span class='hs-str'>" "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span> <span class='hs-varop'>++</span> <span class='hs-str'>"s"</span>
<a name="line-43"></a>
<a name="line-44"></a><a name="strip"></a><span class='hs-comment'>-- | Strip leading and trailing whitespace</span>
<a name="line-45"></a><span class='hs-definition'>strip</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-46"></a><span class='hs-definition'>strip</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>dropWhile</span> <span class='hs-varid'>isSpace</span> <span class='hs-varop'>.</span> <span class='hs-varid'>reverse</span> <span class='hs-varop'>.</span> <span class='hs-varid'>dropWhile</span> <span class='hs-varid'>isSpace</span> <span class='hs-varop'>.</span> <span class='hs-varid'>reverse</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="lineBreaksAt"></a><span class='hs-comment'>-- |</span>
<a name="line-49"></a><span class='hs-comment'>-- ensure that lines are not longer then given `n`, insert line breaks at word</span>
<a name="line-50"></a><span class='hs-comment'>-- boundaries</span>
<a name="line-51"></a><span class='hs-definition'>lineBreaksAt</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-52"></a><span class='hs-definition'>lineBreaksAt</span> <span class='hs-varid'>n</span> <span class='hs-varid'>input</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>words</span> <span class='hs-varid'>input</span> <span class='hs-keyword'>of</span>
<a name="line-53"></a> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>[]</span>
<a name="line-54"></a> <span class='hs-varid'>x</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-55"></a> <span class='hs-keyword'>where</span>
<a name="line-56"></a> <span class='hs-varid'>go</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>String</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-57"></a> <span class='hs-varid'>go</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>c</span> <span class='hs-keyword'>of</span>
<a name="line-58"></a> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>s</span><span class='hs-keyglyph'>]</span>
<a name="line-59"></a> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-conop'>:</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>let</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>++</span> <span class='hs-str'>" "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>y</span> <span class='hs-keyword'>in</span>
<a name="line-60"></a> <span class='hs-keyword'>if</span> <span class='hs-varid'>length</span> <span class='hs-varid'>r</span> <span class='hs-varop'><=</span> <span class='hs-varid'>n</span>
<a name="line-61"></a> <span class='hs-keyword'>then</span> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span>
<a name="line-62"></a> <span class='hs-keyword'>else</span> <span class='hs-varid'>s</span> <span class='hs-conop'>:</span> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span><span class='hs-layout'>,</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="Path"></a><span class='hs-comment'>-- |</span>
<a name="line-65"></a><a name="Path"></a><span class='hs-comment'>-- A `Path` represents the location of an example within the spec tree.</span>
<a name="line-66"></a><a name="Path"></a><span class='hs-comment'>--</span>
<a name="line-67"></a><a name="Path"></a><span class='hs-comment'>-- It consists of a list of group descriptions and a requirement description.</span>
<a name="line-68"></a><a name="Path"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Path</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-conid'>String</span><span class='hs-layout'>)</span>
<a name="line-69"></a>
<a name="line-70"></a><a name="formatRequirement"></a><span class='hs-comment'>-- |</span>
<a name="line-71"></a><span class='hs-comment'>-- Try to create a proper English sentence from a path by applying some</span>
<a name="line-72"></a><span class='hs-comment'>-- heuristics.</span>
<a name="line-73"></a><span class='hs-definition'>formatRequirement</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-74"></a><span class='hs-definition'>formatRequirement</span> <span class='hs-layout'>(</span><span class='hs-varid'>groups</span><span class='hs-layout'>,</span> <span class='hs-varid'>requirement</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>groups_</span> <span class='hs-varop'>++</span> <span class='hs-varid'>requirement</span>
<a name="line-75"></a> <span class='hs-keyword'>where</span>
<a name="line-76"></a> <span class='hs-varid'>groups_</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>break</span> <span class='hs-layout'>(</span><span class='hs-varid'>any</span> <span class='hs-varid'>isSpace</span><span class='hs-layout'>)</span> <span class='hs-varid'>groups</span> <span class='hs-keyword'>of</span>
<a name="line-77"></a> <span class='hs-layout'>(</span><span class='hs-conid'>[]</span><span class='hs-layout'>,</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>join</span> <span class='hs-varid'>ys</span>
<a name="line-78"></a> <span class='hs-layout'>(</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>join</span> <span class='hs-layout'>(</span><span class='hs-varid'>intercalate</span> <span class='hs-str'>"."</span> <span class='hs-varid'>xs</span> <span class='hs-conop'>:</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span>
<a name="line-79"></a>
<a name="line-80"></a> <span class='hs-varid'>join</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>xs</span> <span class='hs-keyword'>of</span>
<a name="line-81"></a> <span class='hs-keyglyph'>[</span><span class='hs-varid'>x</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>x</span> <span class='hs-varop'>++</span> <span class='hs-str'>" "</span>
<a name="line-82"></a> <span class='hs-varid'>ys</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>concatMap</span> <span class='hs-layout'>(</span><span class='hs-varop'>++</span> <span class='hs-str'>", "</span><span class='hs-layout'>)</span> <span class='hs-varid'>ys</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="filterPredicate"></a><span class='hs-comment'>-- | A predicate that can be used to filter a spec tree.</span>
<a name="line-85"></a><span class='hs-definition'>filterPredicate</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span>
<a name="line-86"></a><span class='hs-definition'>filterPredicate</span> <span class='hs-varid'>pattern</span> <span class='hs-varid'>path</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-varid'>groups</span><span class='hs-layout'>,</span> <span class='hs-varid'>requirement</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-87"></a> <span class='hs-varid'>pattern</span> <span class='hs-varop'>`isInfixOf`</span> <span class='hs-varid'>plain</span>
<a name="line-88"></a> <span class='hs-varop'>||</span> <span class='hs-varid'>pattern</span> <span class='hs-varop'>`isInfixOf`</span> <span class='hs-varid'>formatted</span>
<a name="line-89"></a> <span class='hs-keyword'>where</span>
<a name="line-90"></a> <span class='hs-varid'>plain</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>intercalate</span> <span class='hs-str'>"/"</span> <span class='hs-layout'>(</span><span class='hs-varid'>groups</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>requirement</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-91"></a> <span class='hs-varid'>formatted</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>formatRequirement</span> <span class='hs-varid'>path</span>
<a name="line-92"></a>
<a name="line-93"></a><a name="formatException"></a><span class='hs-comment'>-- | The function `formatException` converts an exception to a string.</span>
<a name="line-94"></a><span class='hs-comment'>--</span>
<a name="line-95"></a><span class='hs-comment'>-- This is different from `show`. The type of the exception is included, e.g.:</span>
<a name="line-96"></a><span class='hs-comment'>--</span>
<a name="line-97"></a><span class='hs-comment'>-- >>> formatException (toException DivideByZero)</span>
<a name="line-98"></a><span class='hs-comment'>-- "ArithException (divide by zero)"</span>
<a name="line-99"></a><span class='hs-comment'>--</span>
<a name="line-100"></a><span class='hs-comment'>-- For `IOException`s the `IOErrorType` is included, as well.</span>
<a name="line-101"></a><span class='hs-definition'>formatException</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-102"></a><span class='hs-definition'>formatException</span> <span class='hs-varid'>err</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>SomeException</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>fromException</span> <span class='hs-varid'>err</span> <span class='hs-keyword'>of</span>
<a name="line-103"></a> <span class='hs-conid'>Just</span> <span class='hs-varid'>ioe</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>showType</span> <span class='hs-varid'>ioe</span> <span class='hs-varop'>++</span> <span class='hs-str'>" of type "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>showIOErrorType</span> <span class='hs-varid'>ioe</span> <span class='hs-varop'>++</span> <span class='hs-str'>" ("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>ioe</span> <span class='hs-varop'>++</span> <span class='hs-str'>")"</span>
<a name="line-104"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>showType</span> <span class='hs-varid'>e</span> <span class='hs-varop'>++</span> <span class='hs-str'>" ("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>e</span> <span class='hs-varop'>++</span> <span class='hs-str'>")"</span>
<a name="line-105"></a> <span class='hs-keyword'>where</span>
<a name="line-106"></a> <span class='hs-varid'>showIOErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOException</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-107"></a> <span class='hs-varid'>showIOErrorType</span> <span class='hs-varid'>ioe</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ioe_type</span> <span class='hs-varid'>ioe</span> <span class='hs-keyword'>of</span>
<a name="line-108"></a> <span class='hs-conid'>AlreadyExists</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"AlreadyExists"</span>
<a name="line-109"></a> <span class='hs-conid'>NoSuchThing</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"NoSuchThing"</span>
<a name="line-110"></a> <span class='hs-conid'>ResourceBusy</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"ResourceBusy"</span>
<a name="line-111"></a> <span class='hs-conid'>ResourceExhausted</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"ResourceExhausted"</span>
<a name="line-112"></a> <span class='hs-conid'>EOF</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"EOF"</span>
<a name="line-113"></a> <span class='hs-conid'>IllegalOperation</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"IllegalOperation"</span>
<a name="line-114"></a> <span class='hs-conid'>PermissionDenied</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"PermissionDenied"</span>
<a name="line-115"></a> <span class='hs-conid'>UserError</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"UserError"</span>
<a name="line-116"></a> <span class='hs-conid'>UnsatisfiedConstraints</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"UnsatisfiedConstraints"</span>
<a name="line-117"></a> <span class='hs-conid'>SystemError</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"SystemError"</span>
<a name="line-118"></a> <span class='hs-conid'>ProtocolError</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"ProtocolError"</span>
<a name="line-119"></a> <span class='hs-conid'>OtherError</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"OtherError"</span>
<a name="line-120"></a> <span class='hs-conid'>InvalidArgument</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"InvalidArgument"</span>
<a name="line-121"></a> <span class='hs-conid'>InappropriateType</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"InappropriateType"</span>
<a name="line-122"></a> <span class='hs-conid'>HardwareFault</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"HardwareFault"</span>
<a name="line-123"></a> <span class='hs-conid'>UnsupportedOperation</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"UnsupportedOperation"</span>
<a name="line-124"></a> <span class='hs-conid'>TimeExpired</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"TimeExpired"</span>
<a name="line-125"></a> <span class='hs-conid'>ResourceVanished</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"ResourceVanished"</span>
<a name="line-126"></a> <span class='hs-conid'>Interrupted</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"Interrupted"</span>
<a name="line-127"></a>
<a name="line-128"></a><a name="safeTry"></a><span class='hs-comment'>-- | @safeTry@ evaluates given action and returns its result. If an exception</span>
<a name="line-129"></a><span class='hs-comment'>-- occurs, the exception is returned instead. Unlike `try` it is agnostic to</span>
<a name="line-130"></a><span class='hs-comment'>-- asynchronous exceptions.</span>
<a name="line-131"></a><span class='hs-definition'>safeTry</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>SomeException</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-132"></a><span class='hs-definition'>safeTry</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>withAsync</span> <span class='hs-layout'>(</span><span class='hs-varid'>action</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>evaluate</span><span class='hs-layout'>)</span> <span class='hs-varid'>waitCatch</span>
</pre></body>
</html>
|