This file is indexed.

/usr/share/doc/libghc-exceptions-doc/html/src/Control-Monad-Catch.html is in libghc-exceptions-doc 0.8.0.2-3build1.

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

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
<?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/Control/Monad/Catch.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE ExistentialQuantification #-}</span>
<a name="line-3"></a><span class='hs-comment'>{-# LANGUAGE GeneralizedNewtypeDeriving #-}</span>
<a name="line-4"></a><span class='hs-comment'>{-# LANGUAGE RankNTypes #-}</span>
<a name="line-5"></a><span class='hs-comment'>{-# LANGUAGE FlexibleInstances #-}</span>
<a name="line-6"></a><span class='hs-comment'>{-# LANGUAGE MultiParamTypeClasses #-}</span>
<a name="line-7"></a><span class='hs-comment'>{-# LANGUAGE UndecidableInstances #-}</span>
<a name="line-8"></a><span class='hs-comment'>{-# LANGUAGE TypeFamilies #-}</span>
<a name="line-9"></a>
<a name="line-10"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt;= 702</span>
<a name="line-11"></a><span class='hs-comment'>{-# LANGUAGE Trustworthy #-}</span>
<a name="line-12"></a><span class='hs-cpp'>#endif</span>
<a name="line-13"></a>
<a name="line-14"></a><span class='hs-cpp'>#ifndef MIN_VERSION_transformers</span>
<a name="line-15"></a><span class='hs-cpp'>#define MIN_VERSION_transformers(x,y,z) 1</span>
<a name="line-16"></a><span class='hs-cpp'>#endif</span>
<a name="line-17"></a>
<a name="line-18"></a><span class='hs-cpp'>#ifndef MIN_VERSION_mtl</span>
<a name="line-19"></a><span class='hs-cpp'>#define MIN_VERSION_mtl(x,y,z) 1</span>
<a name="line-20"></a><span class='hs-cpp'>#endif</span>
<a name="line-21"></a>
<a name="line-22"></a><span class='hs-comment'>{-# OPTIONS_GHC -fno-warn-deprecations #-}</span>
<a name="line-23"></a><span class='hs-comment'>--------------------------------------------------------------------</span>
<a name="line-24"></a><span class='hs-comment'>-- |</span>
<a name="line-25"></a><span class='hs-comment'>-- Copyright   :  (C) Edward Kmett 2013-2015, (c) Google Inc. 2012</span>
<a name="line-26"></a><span class='hs-comment'>-- License     :  BSD-style (see the file LICENSE)</span>
<a name="line-27"></a><span class='hs-comment'>-- Maintainer  :  Edward Kmett &lt;ekmett@gmail.com&gt;</span>
<a name="line-28"></a><span class='hs-comment'>-- Stability   :  experimental</span>
<a name="line-29"></a><span class='hs-comment'>-- Portability :  non-portable</span>
<a name="line-30"></a><span class='hs-comment'>--</span>
<a name="line-31"></a><span class='hs-comment'>-- This module supports monads that can throw extensible exceptions. The</span>
<a name="line-32"></a><span class='hs-comment'>-- exceptions are the very same from "Control.Exception", and the operations</span>
<a name="line-33"></a><span class='hs-comment'>-- offered very similar, but here they are not limited to 'IO'.</span>
<a name="line-34"></a><span class='hs-comment'>--</span>
<a name="line-35"></a><span class='hs-comment'>-- This code is in the style of both transformers and mtl, and is compatible</span>
<a name="line-36"></a><span class='hs-comment'>-- with them, though doesn't mimic the module structure or offer the complete</span>
<a name="line-37"></a><span class='hs-comment'>-- range of features in those packages.</span>
<a name="line-38"></a><span class='hs-comment'>--</span>
<a name="line-39"></a><span class='hs-comment'>-- This is very similar to 'ErrorT' and 'MonadError', but based on features of</span>
<a name="line-40"></a><span class='hs-comment'>-- "Control.Exception". In particular, it handles the complex case of</span>
<a name="line-41"></a><span class='hs-comment'>-- asynchronous exceptions by including 'mask' in the typeclass. Note that the</span>
<a name="line-42"></a><span class='hs-comment'>-- extensible extensions feature relies on the RankNTypes language extension.</span>
<a name="line-43"></a><span class='hs-comment'>--------------------------------------------------------------------</span>
<a name="line-44"></a>
<a name="line-45"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Catch</span> <span class='hs-layout'>(</span>
<a name="line-46"></a>    <span class='hs-comment'>-- * Typeclass</span>
<a name="line-47"></a>    <span class='hs-comment'>-- $mtl</span>
<a name="line-48"></a>    <span class='hs-conid'>MonadThrow</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-49"></a>  <span class='hs-layout'>,</span> <span class='hs-conid'>MonadCatch</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-50"></a>  <span class='hs-layout'>,</span> <span class='hs-conid'>MonadMask</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-51"></a>
<a name="line-52"></a>    <span class='hs-comment'>-- * Utilities</span>
<a name="line-53"></a>    <span class='hs-comment'>-- $utilities</span>
<a name="line-54"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>mask_</span>
<a name="line-55"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>uninterruptibleMask_</span>
<a name="line-56"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>catchAll</span>
<a name="line-57"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>catchIOError</span>
<a name="line-58"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>catchJust</span>
<a name="line-59"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>catchIf</span>
<a name="line-60"></a>  <span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>catches</span>
<a name="line-61"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>handle</span>
<a name="line-62"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>handleAll</span>
<a name="line-63"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>handleIOError</span>
<a name="line-64"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>handleJust</span>
<a name="line-65"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>handleIf</span>
<a name="line-66"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>try</span>
<a name="line-67"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>tryJust</span>
<a name="line-68"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>onException</span>
<a name="line-69"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>bracket</span>
<a name="line-70"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>bracket_</span>
<a name="line-71"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>finally</span>
<a name="line-72"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>bracketOnError</span>
<a name="line-73"></a>    <span class='hs-comment'>-- * Re-exports from Control.Exception</span>
<a name="line-74"></a>  <span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-75"></a>  <span class='hs-layout'>,</span> <span class='hs-conid'>SomeException</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-76"></a>  <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-77"></a>
<a name="line-78"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>SomeException</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-79"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ControlException</span>
<a name="line-80"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>STM</span>
<a name="line-81"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyRWS</span>
<a name="line-82"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>RWS</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictRWS</span>
<a name="line-83"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyS</span>
<a name="line-84"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictS</span>
<a name="line-85"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Writer</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>LazyW</span>
<a name="line-86"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Writer</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>StrictW</span>
<a name="line-87"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>)</span>
<a name="line-88"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>runListT</span><span class='hs-layout'>)</span>
<a name="line-89"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>runMaybeT</span><span class='hs-layout'>)</span>
<a name="line-90"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Error</span><span class='hs-layout'>,</span> <span class='hs-varid'>runErrorT</span><span class='hs-layout'>)</span>
<a name="line-91"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Except</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>runExceptT</span><span class='hs-layout'>)</span>
<a name="line-92"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Cont</span> <span class='hs-layout'>(</span><span class='hs-conid'>ContT</span><span class='hs-layout'>)</span>
<a name="line-93"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span><span class='hs-varop'>.</span><span class='hs-conid'>Identity</span>
<a name="line-94"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Reader</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Reader</span>
<a name="line-95"></a>
<a name="line-96"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &lt; 706</span>
<a name="line-97"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldr</span><span class='hs-layout'>)</span>
<a name="line-98"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span>
<a name="line-99"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span>
<a name="line-100"></a><span class='hs-cpp'>#elif __GLASGOW_HASKELL__ &lt; 710</span>
<a name="line-101"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldr</span><span class='hs-layout'>)</span>
<a name="line-102"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span>
<a name="line-103"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span>
<a name="line-104"></a><span class='hs-cpp'>#endif</span>
<a name="line-105"></a>
<a name="line-106"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-107"></a><span class='hs-comment'>-- $mtl</span>
<a name="line-108"></a><span class='hs-comment'>-- The mtl style typeclass</span>
<a name="line-109"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-110"></a>
<a name="line-111"></a><a name="MonadThrow"></a><span class='hs-comment'>-- | A class for monads in which exceptions may be thrown.</span>
<a name="line-112"></a><a name="MonadThrow"></a><span class='hs-comment'>--</span>
<a name="line-113"></a><a name="MonadThrow"></a><span class='hs-comment'>-- Instances should obey the following law:</span>
<a name="line-114"></a><a name="MonadThrow"></a><span class='hs-comment'>--</span>
<a name="line-115"></a><a name="MonadThrow"></a><span class='hs-comment'>-- &gt; throwM e &gt;&gt; x = throwM e</span>
<a name="line-116"></a><a name="MonadThrow"></a><span class='hs-comment'>--</span>
<a name="line-117"></a><a name="MonadThrow"></a><span class='hs-comment'>-- In other words, throwing an exception short-circuits the rest of the monadic</span>
<a name="line-118"></a><a name="MonadThrow"></a><span class='hs-comment'>-- computation.</span>
<a name="line-119"></a><a name="MonadThrow"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span>
<a name="line-120"></a>  <span class='hs-comment'>-- | Throw an exception. Note that this throws when this action is run in</span>
<a name="line-121"></a>  <span class='hs-comment'>-- the monad @m@, not when it is applied. It is a generalization of</span>
<a name="line-122"></a>  <span class='hs-comment'>-- "Control.Exception"'s 'ControlException.throwIO'.</span>
<a name="line-123"></a>  <span class='hs-comment'>--</span>
<a name="line-124"></a>  <span class='hs-comment'>-- Should satisfy the law:</span>
<a name="line-125"></a>  <span class='hs-comment'>--</span>
<a name="line-126"></a>  <span class='hs-comment'>-- &gt; throwM e &gt;&gt; f = throwM e</span>
<a name="line-127"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-128"></a>
<a name="line-129"></a><a name="MonadCatch"></a><span class='hs-comment'>-- | A class for monads which allow exceptions to be caught, in particular</span>
<a name="line-130"></a><a name="MonadCatch"></a><span class='hs-comment'>-- exceptions which were thrown by 'throwM'.</span>
<a name="line-131"></a><a name="MonadCatch"></a><span class='hs-comment'>--</span>
<a name="line-132"></a><a name="MonadCatch"></a><span class='hs-comment'>-- Instances should obey the following law:</span>
<a name="line-133"></a><a name="MonadCatch"></a><span class='hs-comment'>--</span>
<a name="line-134"></a><a name="MonadCatch"></a><span class='hs-comment'>-- &gt; catch (throwM e) f = f e</span>
<a name="line-135"></a><a name="MonadCatch"></a><span class='hs-comment'>--</span>
<a name="line-136"></a><a name="MonadCatch"></a><span class='hs-comment'>-- Note that the ability to catch an exception does /not/ guarantee that we can</span>
<a name="line-137"></a><a name="MonadCatch"></a><span class='hs-comment'>-- deal with all possible exit points from a computation. Some monads, such as</span>
<a name="line-138"></a><a name="MonadCatch"></a><span class='hs-comment'>-- continuation-based stacks, allow for more than just a success/failure</span>
<a name="line-139"></a><a name="MonadCatch"></a><span class='hs-comment'>-- strategy, and therefore @catch@ /cannot/ be used by those monads to properly</span>
<a name="line-140"></a><a name="MonadCatch"></a><span class='hs-comment'>-- implement a function such as @finally@. For more information, see</span>
<a name="line-141"></a><a name="MonadCatch"></a><span class='hs-comment'>-- 'MonadMask'.</span>
<a name="line-142"></a><a name="MonadCatch"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span>
<a name="line-143"></a>  <span class='hs-comment'>-- | Provide a handler for exceptions thrown during execution of the first</span>
<a name="line-144"></a>  <span class='hs-comment'>-- action. Note that type of the type of the argument to the handler will</span>
<a name="line-145"></a>  <span class='hs-comment'>-- constrain which exceptions are caught. See "Control.Exception"'s</span>
<a name="line-146"></a>  <span class='hs-comment'>-- 'ControlException.catch'.</span>
<a name="line-147"></a>  <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-148"></a>
<a name="line-149"></a><a name="MonadMask"></a><span class='hs-comment'>-- | A class for monads which provide for the ability to account for all</span>
<a name="line-150"></a><a name="MonadMask"></a><span class='hs-comment'>-- possible exit points from a computation, and to mask asynchronous</span>
<a name="line-151"></a><a name="MonadMask"></a><span class='hs-comment'>-- exceptions. Continuation-based monads, and stacks such as @ErrorT e IO@</span>
<a name="line-152"></a><a name="MonadMask"></a><span class='hs-comment'>-- which provide for multiple failure modes, are invalid instances of this</span>
<a name="line-153"></a><a name="MonadMask"></a><span class='hs-comment'>-- class.</span>
<a name="line-154"></a><a name="MonadMask"></a><span class='hs-comment'>--</span>
<a name="line-155"></a><a name="MonadMask"></a><span class='hs-comment'>-- Note that this package /does/ provide a @MonadMask@ instance for @CatchT@.</span>
<a name="line-156"></a><a name="MonadMask"></a><span class='hs-comment'>-- This instance is /only/ valid if the base monad provides no ability to</span>
<a name="line-157"></a><a name="MonadMask"></a><span class='hs-comment'>-- provide multiple exit. For example, @IO@ or @Either@ would be invalid base</span>
<a name="line-158"></a><a name="MonadMask"></a><span class='hs-comment'>-- monads, but @Reader@ or @State@ would be acceptable.</span>
<a name="line-159"></a><a name="MonadMask"></a><span class='hs-comment'>--</span>
<a name="line-160"></a><a name="MonadMask"></a><span class='hs-comment'>-- Instances should ensure that, in the following code:</span>
<a name="line-161"></a><a name="MonadMask"></a><span class='hs-comment'>--</span>
<a name="line-162"></a><a name="MonadMask"></a><span class='hs-comment'>-- &gt; f `finally` g</span>
<a name="line-163"></a><a name="MonadMask"></a><span class='hs-comment'>--</span>
<a name="line-164"></a><a name="MonadMask"></a><span class='hs-comment'>-- The action @g@ is called regardless of what occurs within @f@, including</span>
<a name="line-165"></a><a name="MonadMask"></a><span class='hs-comment'>-- async exceptions.</span>
<a name="line-166"></a><a name="MonadMask"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyword'>where</span>
<a name="line-167"></a>  <span class='hs-comment'>-- | Runs an action with asynchronous exceptions disabled. The action is</span>
<a name="line-168"></a>  <span class='hs-comment'>-- provided a method for restoring the async. environment to what it was</span>
<a name="line-169"></a>  <span class='hs-comment'>-- at the 'mask' call. See "Control.Exception"'s 'ControlException.mask'.</span>
<a name="line-170"></a>  <span class='hs-varid'>mask</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span>
<a name="line-171"></a>
<a name="line-172"></a>  <span class='hs-comment'>-- | Like 'mask', but the masked computation is not interruptible (see</span>
<a name="line-173"></a>  <span class='hs-comment'>-- "Control.Exception"'s 'ControlException.uninterruptibleMask'. WARNING:</span>
<a name="line-174"></a>  <span class='hs-comment'>-- Only use if you need to mask exceptions around an interruptible operation</span>
<a name="line-175"></a>  <span class='hs-comment'>-- AND you can guarantee the interruptible operation will only block for a</span>
<a name="line-176"></a>  <span class='hs-comment'>-- short period of time. Otherwise you render the program/thread unresponsive</span>
<a name="line-177"></a>  <span class='hs-comment'>-- and/or unkillable.</span>
<a name="line-178"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span>
<a name="line-179"></a>
<a name="line-180"></a><a name="instance%20MonadThrow%20%5b%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>[]</span> <span class='hs-keyword'>where</span>
<a name="line-181"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-182"></a><a name="instance%20MonadThrow%20Maybe"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>Maybe</span> <span class='hs-keyword'>where</span>
<a name="line-183"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-184"></a><a name="instance%20MonadThrow%20(Either%20e)"></a><span class='hs-keyword'>instance</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>~</span> <span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-185"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toException</span>
<a name="line-186"></a>
<a name="line-187"></a><a name="instance%20MonadThrow%20IO"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>IO</span> <span class='hs-keyword'>where</span>
<a name="line-188"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>throwIO</span>
<a name="line-189"></a><a name="instance%20MonadCatch%20IO"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-conid'>IO</span> <span class='hs-keyword'>where</span>
<a name="line-190"></a>  <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span>
<a name="line-191"></a><a name="instance%20MonadMask%20IO"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-conid'>IO</span> <span class='hs-keyword'>where</span>
<a name="line-192"></a>  <span class='hs-varid'>mask</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>mask</span>
<a name="line-193"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>uninterruptibleMask</span>
<a name="line-194"></a>
<a name="line-195"></a><a name="instance%20MonadThrow%20STM"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-conid'>STM</span> <span class='hs-keyword'>where</span>
<a name="line-196"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-varid'>throwSTM</span>
<a name="line-197"></a><a name="instance%20MonadCatch%20STM"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-conid'>STM</span> <span class='hs-keyword'>where</span>
<a name="line-198"></a>  <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-varid'>catchSTM</span>
<a name="line-199"></a>
<a name="line-200"></a><a name="instance%20MonadThrow%20(IdentityT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-201"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-202"></a><a name="instance%20MonadCatch%20(IdentityT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-203"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runIdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-204"></a><a name="instance%20MonadMask%20(IdentityT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-205"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>runIdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span>
<a name="line-206"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-207"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runIdentityT</span>
<a name="line-208"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-209"></a>    <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>runIdentityT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span>
<a name="line-210"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-211"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IdentityT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runIdentityT</span>
<a name="line-212"></a>
<a name="line-213"></a><a name="instance%20MonadThrow%20(LazyS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-214"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-215"></a><a name="instance%20MonadCatch%20(LazyS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-216"></a>  <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>liftCatch</span> <span class='hs-varid'>catch</span>
<a name="line-217"></a><a name="instance%20MonadMask%20(LazyS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-218"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span>
<a name="line-219"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-220"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-221"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-222"></a>    <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span>
<a name="line-223"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-224"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-225"></a>
<a name="line-226"></a><a name="instance%20MonadThrow%20(StrictS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-227"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-228"></a><a name="instance%20MonadCatch%20(StrictS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-229"></a>  <span class='hs-varid'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>liftCatch</span> <span class='hs-varid'>catch</span>
<a name="line-230"></a><a name="instance%20MonadMask%20(StrictS.StateT%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-231"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span>
<a name="line-232"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-233"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-234"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-235"></a>    <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-varid'>runStateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span>
<a name="line-236"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-237"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictS</span><span class='hs-varop'>.</span><span class='hs-conid'>StateT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-238"></a>
<a name="line-239"></a><a name="instance%20MonadThrow%20(ReaderT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-240"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-241"></a><a name="instance%20MonadCatch%20(ReaderT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-242"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>c</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span>
<a name="line-243"></a><a name="instance%20MonadMask%20(ReaderT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-244"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span>
<a name="line-245"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-246"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-247"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-248"></a>    <span class='hs-conid'>ReaderT</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>runReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span>
<a name="line-249"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ReaderT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-250"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReaderT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReaderT</span> <span class='hs-layout'>(</span><span class='hs-varid'>u</span> <span class='hs-varop'>.</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-251"></a>
<a name="line-252"></a><a name="instance%20MonadThrow%20(StrictW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-253"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-254"></a><a name="instance%20MonadCatch%20(StrictW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-255"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`</span><span class='hs-varid'>catch</span> <span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-256"></a><a name="instance%20MonadMask%20(StrictW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-257"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span>
<a name="line-258"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-259"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-260"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-261"></a>    <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span>
<a name="line-262"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-263"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-264"></a>
<a name="line-265"></a><a name="instance%20MonadThrow%20(LazyW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-266"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-267"></a><a name="instance%20MonadCatch%20(LazyW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-268"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`</span><span class='hs-varid'>catch</span> <span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-269"></a><a name="instance%20MonadMask%20(LazyW.WriterT%20w%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-270"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span>
<a name="line-271"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-272"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-273"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-274"></a>    <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span>
<a name="line-275"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varid'>w</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-276"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-conid'>WriterT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyW</span><span class='hs-varop'>.</span><span class='hs-varid'>runWriterT</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-277"></a>
<a name="line-278"></a><a name="instance%20MonadThrow%20(LazyRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-279"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-280"></a><a name="instance%20MonadCatch%20(LazyRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-281"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span>
<a name="line-282"></a><a name="instance%20MonadMask%20(LazyRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-283"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span>
<a name="line-284"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-285"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-286"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-287"></a>    <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span>
<a name="line-288"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-289"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LazyRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-290"></a>
<a name="line-291"></a><a name="instance%20MonadThrow%20(StrictRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-292"></a>  <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>$</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-293"></a><a name="instance%20MonadCatch%20(StrictRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-294"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span>
<a name="line-295"></a><a name="instance%20MonadMask%20(StrictRWS.RWST%20r%20w%20s%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadMask</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-296"></a>  <span class='hs-varid'>mask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span>
<a name="line-297"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-298"></a>          <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-299"></a>  <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-300"></a>    <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-varid'>runRWST</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span> <span class='hs-varid'>u</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span>
<a name="line-301"></a>      <span class='hs-keyword'>where</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>r</span> <span class='hs-varid'>w</span> <span class='hs-varid'>s</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-302"></a>            <span class='hs-varid'>q</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StrictRWS</span><span class='hs-varop'>.</span><span class='hs-conid'>RWST</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>u</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-303"></a>
<a name="line-304"></a><a name="instance%20MonadThrow%20(ListT%20m)"></a><span class='hs-comment'>-- Transformers which are only instances of MonadThrow and MonadCatch, not MonadMask</span>
<a name="line-305"></a><a name="instance%20MonadThrow%20(ListT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-306"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span>
<a name="line-307"></a><a name="instance%20MonadCatch%20(ListT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-308"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ListT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runListT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-309"></a>
<a name="line-310"></a><a name="instance%20MonadThrow%20(MaybeT%20m)"></a><span class='hs-comment'>-- | Throws exceptions into the base monad.</span>
<a name="line-311"></a><a name="instance%20MonadThrow%20(MaybeT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-312"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span>
<a name="line-313"></a><a name="instance%20MonadCatch%20(MaybeT%20m)"></a><span class='hs-comment'>-- | Catches exceptions from the base monad.</span>
<a name="line-314"></a><a name="instance%20MonadCatch%20(MaybeT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-315"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>MaybeT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MaybeT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runMaybeT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-316"></a>
<a name="line-317"></a><a name="instance%20MonadThrow%20(ErrorT%20e%20m)"></a><span class='hs-comment'>-- | Throws exceptions into the base monad.</span>
<a name="line-318"></a><a name="instance%20MonadThrow%20(ErrorT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Error</span> <span class='hs-varid'>e</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-319"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span>
<a name="line-320"></a><a name="instance%20MonadCatch%20(ErrorT%20e%20m)"></a><span class='hs-comment'>-- | Catches exceptions from the base monad.</span>
<a name="line-321"></a><a name="instance%20MonadCatch%20(ErrorT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Error</span> <span class='hs-varid'>e</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-322"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ErrorT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runErrorT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-323"></a>
<a name="line-324"></a><a name="instance%20MonadThrow%20(ExceptT%20e%20m)"></a><span class='hs-comment'>-- | Throws exceptions into the base monad.</span>
<a name="line-325"></a><a name="instance%20MonadThrow%20(ExceptT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-326"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span>
<a name="line-327"></a><a name="instance%20MonadCatch%20(ExceptT%20e%20m)"></a><span class='hs-comment'>-- | Catches exceptions from the base monad.</span>
<a name="line-328"></a><a name="instance%20MonadCatch%20(ExceptT%20e%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span> <span class='hs-varid'>e</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-329"></a>  <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExceptT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ExceptT</span> <span class='hs-varop'>$</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>runExceptT</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-330"></a>
<a name="line-331"></a><a name="instance%20MonadThrow%20(ContT%20r%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>MonadThrow</span> <span class='hs-layout'>(</span><span class='hs-conid'>ContT</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-332"></a>  <span class='hs-varid'>throwM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwM</span>
<a name="line-333"></a><span class='hs-comment'>-- I don't believe any valid of MonadCatch exists for ContT.</span>
<a name="line-334"></a><span class='hs-comment'>-- instance MonadCatch m =&gt; MonadCatch (ContT r m) where</span>
<a name="line-335"></a>
<a name="line-336"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-337"></a><span class='hs-comment'>-- $utilities</span>
<a name="line-338"></a><span class='hs-comment'>-- These functions follow those from "Control.Exception", except that they are</span>
<a name="line-339"></a><span class='hs-comment'>-- based on methods from the 'MonadCatch' typeclass. See</span>
<a name="line-340"></a><span class='hs-comment'>-- "Control.Exception" for API usage.</span>
<a name="line-341"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-342"></a>
<a name="line-343"></a><a name="mask_"></a><span class='hs-comment'>-- | Like 'mask', but does not pass a @restore@ action to the argument.</span>
<a name="line-344"></a><span class='hs-definition'>mask_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-345"></a><span class='hs-definition'>mask_</span> <span class='hs-varid'>io</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>io</span>
<a name="line-346"></a>
<a name="line-347"></a><a name="uninterruptibleMask_"></a><span class='hs-comment'>-- | Like 'uninterruptibleMask', but does not pass a @restore@ action to the</span>
<a name="line-348"></a><span class='hs-comment'>-- argument.</span>
<a name="line-349"></a><span class='hs-definition'>uninterruptibleMask_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-350"></a><span class='hs-definition'>uninterruptibleMask_</span> <span class='hs-varid'>io</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>uninterruptibleMask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>io</span>
<a name="line-351"></a>
<a name="line-352"></a><a name="catchAll"></a><span class='hs-comment'>-- | Catches all exceptions, and somewhat defeats the purpose of the extensible</span>
<a name="line-353"></a><span class='hs-comment'>-- exception system. Use sparingly.</span>
<a name="line-354"></a><span class='hs-definition'>catchAll</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-355"></a><span class='hs-definition'>catchAll</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span>
<a name="line-356"></a>
<a name="line-357"></a><a name="catchIOError"></a><span class='hs-comment'>-- | Catch all 'IOError' (eqv. 'IOException') exceptions. Still somewhat too</span>
<a name="line-358"></a><span class='hs-comment'>-- general, but better than using 'catchAll'. See 'catchIf' for an easy way</span>
<a name="line-359"></a><span class='hs-comment'>-- of catching specific 'IOError's based on the predicates in "System.IO.Error".</span>
<a name="line-360"></a><span class='hs-definition'>catchIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-361"></a><span class='hs-definition'>catchIOError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span>
<a name="line-362"></a>
<a name="line-363"></a><a name="catchIf"></a><span class='hs-comment'>-- | Catch exceptions only if they pass some predicate. Often useful with the</span>
<a name="line-364"></a><span class='hs-comment'>-- predicates for testing 'IOError' values in "System.IO.Error".</span>
<a name="line-365"></a><span class='hs-definition'>catchIf</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span>
<a name="line-366"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-367"></a><span class='hs-definition'>catchIf</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>f</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>b</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-368"></a>
<a name="line-369"></a><a name="catchJust"></a><span class='hs-comment'>-- | A more generalized way of determining which exceptions to catch at</span>
<a name="line-370"></a><span class='hs-comment'>-- run time.</span>
<a name="line-371"></a><span class='hs-definition'>catchJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span>
<a name="line-372"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-373"></a><span class='hs-definition'>catchJust</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>b</span> <span class='hs-varop'>$</span> <span class='hs-varid'>f</span> <span class='hs-varid'>e</span>
<a name="line-374"></a>
<a name="line-375"></a><a name="handle"></a><span class='hs-comment'>-- | Flipped 'catch'. See "Control.Exception"'s 'ControlException.handle'.</span>
<a name="line-376"></a><span class='hs-definition'>handle</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-377"></a><span class='hs-definition'>handle</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-varid'>catch</span>
<a name="line-378"></a><span class='hs-comment'>{-# INLINE handle #-}</span>
<a name="line-379"></a>
<a name="line-380"></a><a name="handleIOError"></a><span class='hs-comment'>-- | Flipped 'catchIOError'</span>
<a name="line-381"></a><span class='hs-definition'>handleIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-382"></a><span class='hs-definition'>handleIOError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>handle</span>
<a name="line-383"></a>
<a name="line-384"></a><a name="handleAll"></a><span class='hs-comment'>-- | Flipped 'catchAll'</span>
<a name="line-385"></a><span class='hs-definition'>handleAll</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>SomeException</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-386"></a><span class='hs-definition'>handleAll</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>handle</span>
<a name="line-387"></a>
<a name="line-388"></a><a name="handleIf"></a><span class='hs-comment'>-- | Flipped 'catchIf'</span>
<a name="line-389"></a><span class='hs-definition'>handleIf</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-390"></a><span class='hs-definition'>handleIf</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-layout'>(</span><span class='hs-varid'>catchIf</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-391"></a>
<a name="line-392"></a><a name="handleJust"></a><span class='hs-comment'>-- | Flipped 'catchJust'. See "Control.Exception"'s 'ControlException.handleJust'.</span>
<a name="line-393"></a><span class='hs-definition'>handleJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-394"></a><span class='hs-definition'>handleJust</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-layout'>(</span><span class='hs-varid'>catchJust</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-395"></a><span class='hs-comment'>{-# INLINE handleJust #-}</span>
<a name="line-396"></a>
<a name="line-397"></a><a name="try"></a><span class='hs-comment'>-- | Similar to 'catch', but returns an 'Either' result. See "Control.Exception"'s</span>
<a name="line-398"></a><span class='hs-comment'>-- 'Control.Exception.try'.</span>
<a name="line-399"></a><span class='hs-definition'>try</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>e</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-400"></a><span class='hs-definition'>try</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span>
<a name="line-401"></a>
<a name="line-402"></a><a name="tryJust"></a><span class='hs-comment'>-- | A variant of 'try' that takes an exception predicate to select</span>
<a name="line-403"></a><span class='hs-comment'>-- which exceptions are caught. See "Control.Exception"'s 'ControlException.tryJust'</span>
<a name="line-404"></a><span class='hs-definition'>tryJust</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span>
<a name="line-405"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-varid'>b</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-406"></a><span class='hs-definition'>tryJust</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>`liftM`</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-407"></a>
<a name="line-408"></a><a name="Handler"></a><span class='hs-comment'>-- | Generalized version of 'ControlException.Handler'</span>
<a name="line-409"></a><a name="Handler"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>e</span> <span class='hs-varop'>.</span> <span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-410"></a>
<a name="line-411"></a><a name="instance%20Functor%20(Handler%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-412"></a>  <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>liftM</span> <span class='hs-varid'>f</span> <span class='hs-varop'>.</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span>
<a name="line-413"></a>
<a name="line-414"></a><a name="catches"></a><span class='hs-comment'>-- | Catches different sorts of exceptions. See "Control.Exception"'s 'ControlException.catches'</span>
<a name="line-415"></a><span class='hs-definition'>catches</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Foldable</span> <span class='hs-varid'>f</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-416"></a><span class='hs-definition'>catches</span> <span class='hs-varid'>a</span> <span class='hs-varid'>hs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-varop'>`catch`</span> <span class='hs-varid'>handler</span>
<a name="line-417"></a>  <span class='hs-keyword'>where</span>
<a name="line-418"></a>    <span class='hs-varid'>handler</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldr</span> <span class='hs-varid'>probe</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>hs</span>
<a name="line-419"></a>      <span class='hs-keyword'>where</span>
<a name="line-420"></a>        <span class='hs-varid'>probe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Handler</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>h</span> <span class='hs-layout'>(</span><span class='hs-conid'>ControlException</span><span class='hs-varop'>.</span><span class='hs-varid'>fromException</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-421"></a>
<a name="line-422"></a><a name="onException"></a><span class='hs-comment'>-- | Run an action only if an exception is thrown in the main action. The</span>
<a name="line-423"></a><span class='hs-comment'>-- exception is not caught, simply rethrown.</span>
<a name="line-424"></a><span class='hs-definition'>onException</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadCatch</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-425"></a><span class='hs-definition'>onException</span> <span class='hs-varid'>action</span> <span class='hs-varid'>handler</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>action</span> <span class='hs-varop'>`catchAll`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>handler</span> <span class='hs-varop'>&gt;&gt;</span> <span class='hs-varid'>throwM</span> <span class='hs-varid'>e</span>
<a name="line-426"></a>
<a name="line-427"></a><a name="bracket"></a><span class='hs-comment'>-- | Generalized abstracted pattern of safe resource acquisition and release</span>
<a name="line-428"></a><span class='hs-comment'>-- in the face of exceptions. The first action \"acquires\" some value, which</span>
<a name="line-429"></a><span class='hs-comment'>-- is \"released\" by the second action at the end. The third action \"uses\"</span>
<a name="line-430"></a><span class='hs-comment'>-- the value and its result is the result of the 'bracket'.</span>
<a name="line-431"></a><span class='hs-comment'>--</span>
<a name="line-432"></a><span class='hs-comment'>-- If an exception occurs during the use, the release still happens before the</span>
<a name="line-433"></a><span class='hs-comment'>-- exception is rethrown.</span>
<a name="line-434"></a><span class='hs-definition'>bracket</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span>
<a name="line-435"></a><span class='hs-definition'>bracket</span> <span class='hs-varid'>acquire</span> <span class='hs-varid'>release</span> <span class='hs-varid'>use</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>unmasked</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-436"></a>  <span class='hs-varid'>resource</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>acquire</span>
<a name="line-437"></a>  <span class='hs-varid'>result</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>unmasked</span> <span class='hs-layout'>(</span><span class='hs-varid'>use</span> <span class='hs-varid'>resource</span><span class='hs-layout'>)</span> <span class='hs-varop'>`onException`</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span>
<a name="line-438"></a>  <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span>
<a name="line-439"></a>  <span class='hs-varid'>return</span> <span class='hs-varid'>result</span>
<a name="line-440"></a>
<a name="line-441"></a><a name="bracket_"></a><span class='hs-comment'>-- | Version of 'bracket' without any value being passed to the second and</span>
<a name="line-442"></a><span class='hs-comment'>-- third actions.</span>
<a name="line-443"></a><span class='hs-definition'>bracket_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span>
<a name="line-444"></a><span class='hs-definition'>bracket_</span> <span class='hs-varid'>before</span> <span class='hs-varid'>after</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bracket</span> <span class='hs-varid'>before</span> <span class='hs-layout'>(</span><span class='hs-varid'>const</span> <span class='hs-varid'>after</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>const</span> <span class='hs-varid'>action</span><span class='hs-layout'>)</span>
<a name="line-445"></a>
<a name="line-446"></a><a name="finally"></a><span class='hs-comment'>-- | Perform an action with a finalizer action that is run, even if an</span>
<a name="line-447"></a><span class='hs-comment'>-- exception occurs.</span>
<a name="line-448"></a><span class='hs-definition'>finally</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-449"></a><span class='hs-definition'>finally</span> <span class='hs-varid'>action</span> <span class='hs-varid'>finalizer</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bracket_</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-varid'>finalizer</span> <span class='hs-varid'>action</span>
<a name="line-450"></a>
<a name="line-451"></a><a name="bracketOnError"></a><span class='hs-comment'>-- | Like 'bracket', but only performs the final action if there was an</span>
<a name="line-452"></a><span class='hs-comment'>-- exception raised by the in-between computation.</span>
<a name="line-453"></a><span class='hs-definition'>bracketOnError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadMask</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>c</span>
<a name="line-454"></a><span class='hs-definition'>bracketOnError</span> <span class='hs-varid'>acquire</span> <span class='hs-varid'>release</span> <span class='hs-varid'>use</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mask</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>unmasked</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-455"></a>  <span class='hs-varid'>resource</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>acquire</span>
<a name="line-456"></a>  <span class='hs-varid'>unmasked</span> <span class='hs-layout'>(</span><span class='hs-varid'>use</span> <span class='hs-varid'>resource</span><span class='hs-layout'>)</span> <span class='hs-varop'>`onException`</span> <span class='hs-varid'>release</span> <span class='hs-varid'>resource</span>
</pre></body>
</html>