@@ -28,23 +28,83 @@ module Control.Monad.Class.MonadSTM.Internal
28
28
, MonadInspectSTM (.. )
29
29
, TraceValue (TraceValue , TraceDynamic , TraceString , DontTrace , traceDynamic , traceString )
30
30
, MonadTraceSTM (.. )
31
- -- * Default 'TMVar' implementation
31
+ -- * MonadThrow aliases
32
+ , throwSTM
33
+ , catchSTM
34
+ -- * Default implementations
35
+ -- $default-implementations
36
+ --
37
+ -- ** Default 'TMVar' implementation
32
38
, TMVarDefault (.. )
33
- -- * Default 'TBQueue' implementation
39
+ , newTMVarDefault
40
+ , newEmptyTMVarDefault
41
+ , takeTMVarDefault
42
+ , tryTakeTMVarDefault
43
+ , putTMVarDefault
44
+ , tryPutTMVarDefault
45
+ , readTMVarDefault
46
+ , tryReadTMVarDefault
47
+ , swapTMVarDefault
48
+ , isEmptyTMVarDefault
49
+ , labelTMVarDefault
50
+ , traceTMVarDefault
51
+ -- ** Default 'TBQueue' implementation
34
52
, TQueueDefault (.. )
35
- -- * Default 'TBQueue' implementation
53
+ , newTQueueDefault
54
+ , writeTQueueDefault
55
+ , readTQueueDefault
56
+ , tryReadTQueueDefault
57
+ , isEmptyTQueueDefault
58
+ , peekTQueueDefault
59
+ , tryPeekTQueueDefault
60
+ , flushTQueueDefault
61
+ , unGetTQueueDefault
62
+ , labelTQueueDefault
63
+ -- ** Default 'TBQueue' implementation
36
64
, TBQueueDefault (.. )
37
- -- * Default 'TArray' implementation
65
+ , newTBQueueDefault
66
+ , writeTBQueueDefault
67
+ , readTBQueueDefault
68
+ , tryReadTBQueueDefault
69
+ , peekTBQueueDefault
70
+ , tryPeekTBQueueDefault
71
+ , isEmptyTBQueueDefault
72
+ , isFullTBQueueDefault
73
+ , lengthTBQueueDefault
74
+ , flushTBQueueDefault
75
+ , unGetTBQueueDefault
76
+ , labelTBQueueDefault
77
+ -- ** Default 'TArray' implementation
38
78
, TArrayDefault (.. )
39
- -- * Default 'TSem' implementation
79
+ -- ** Default 'TSem' implementation
40
80
, TSemDefault (.. )
41
- -- * Default 'TChan' implementation
81
+ , newTSemDefault
82
+ , waitTSemDefault
83
+ , signalTSemDefault
84
+ , signalTSemNDefault
85
+ , labelTSemDefault
86
+ -- ** Default 'TChan' implementation
42
87
, TChanDefault (.. )
43
- -- * MonadThrow aliases
44
- , throwSTM
45
- , catchSTM
88
+ , newTChanDefault
89
+ , newBroadcastTChanDefault
90
+ , writeTChanDefault
91
+ , readTChanDefault
92
+ , tryReadTChanDefault
93
+ , peekTChanDefault
94
+ , tryPeekTChanDefault
95
+ , dupTChanDefault
96
+ , unGetTChanDefault
97
+ , isEmptyTChanDefault
98
+ , cloneTChanDefault
99
+ , labelTChanDefault
46
100
) where
47
101
102
+ -- $default-implementations
103
+ --
104
+ -- The default implementations are based on a `TVar` defined in the class. They
105
+ -- are tailored towards `IOSim` rather than instances which would like to derive
106
+ -- from `IO` or monad transformers.
107
+
48
108
import Prelude hiding (read )
49
109
50
110
import qualified Control.Concurrent.STM.TArray as STM
@@ -192,14 +252,6 @@ class (Monad m, Monad (STM m)) => MonadSTM m where
192
252
-- default implementations
193
253
--
194
254
195
- default newTMVar :: TMVar m ~ TMVarDefault m
196
- => a -> STM m (TMVar m a)
197
- newTMVar = newTMVarDefault
198
-
199
- default newEmptyTMVar :: TMVar m ~ TMVarDefault m
200
- => STM m (TMVar m a)
201
- newEmptyTMVar = newEmptyTMVarDefault
202
-
203
255
newTVarIO = atomically . newTVar
204
256
readTVarIO = atomically . readTVar
205
257
newTMVarIO = atomically . newTMVar
@@ -209,175 +261,6 @@ class (Monad m, Monad (STM m)) => MonadSTM m where
209
261
newTChanIO = atomically newTChan
210
262
newBroadcastTChanIO = atomically newBroadcastTChan
211
263
212
- default takeTMVar :: TMVar m ~ TMVarDefault m
213
- => TMVar m a -> STM m a
214
- takeTMVar = takeTMVarDefault
215
-
216
- default tryTakeTMVar :: TMVar m ~ TMVarDefault m
217
- => TMVar m a -> STM m (Maybe a)
218
- tryTakeTMVar = tryTakeTMVarDefault
219
-
220
- default putTMVar :: TMVar m ~ TMVarDefault m => TMVar m a -> a -> STM m ()
221
- putTMVar = putTMVarDefault
222
-
223
- default tryPutTMVar :: TMVar m ~ TMVarDefault m => TMVar m a -> a -> STM m Bool
224
- tryPutTMVar = tryPutTMVarDefault
225
-
226
- default readTMVar :: TMVar m ~ TMVarDefault m
227
- => TMVar m a -> STM m a
228
- readTMVar = readTMVarDefault
229
-
230
- default tryReadTMVar :: TMVar m ~ TMVarDefault m
231
- => TMVar m a -> STM m (Maybe a)
232
- tryReadTMVar = tryReadTMVarDefault
233
-
234
- default swapTMVar :: TMVar m ~ TMVarDefault m
235
- => TMVar m a -> a -> STM m a
236
- swapTMVar = swapTMVarDefault
237
-
238
- default isEmptyTMVar :: TMVar m ~ TMVarDefault m
239
- => TMVar m a -> STM m Bool
240
- isEmptyTMVar = isEmptyTMVarDefault
241
-
242
- default newTQueue :: TQueue m ~ TQueueDefault m
243
- => STM m (TQueue m a)
244
- newTQueue = newTQueueDefault
245
-
246
- default writeTQueue :: TQueue m ~ TQueueDefault m
247
- => TQueue m a -> a -> STM m ()
248
- writeTQueue = writeTQueueDefault
249
-
250
- default readTQueue :: TQueue m ~ TQueueDefault m
251
- => TQueue m a -> STM m a
252
- readTQueue = readTQueueDefault
253
-
254
- default tryReadTQueue :: TQueue m ~ TQueueDefault m
255
- => TQueue m a -> STM m (Maybe a)
256
- tryReadTQueue = tryReadTQueueDefault
257
-
258
- default isEmptyTQueue :: TQueue m ~ TQueueDefault m
259
- => TQueue m a -> STM m Bool
260
- isEmptyTQueue = isEmptyTQueueDefault
261
-
262
- default unGetTQueue :: TQueue m ~ TQueueDefault m
263
- => TQueue m a -> a -> STM m ()
264
- unGetTQueue = unGetTQueueDefault
265
-
266
- default peekTQueue :: TQueue m ~ TQueueDefault m
267
- => TQueue m a -> STM m a
268
- peekTQueue = peekTQueueDefault
269
-
270
- default tryPeekTQueue :: TQueue m ~ TQueueDefault m
271
- => TQueue m a -> STM m (Maybe a)
272
- tryPeekTQueue = tryPeekTQueueDefault
273
-
274
- default flushTQueue :: TQueue m ~ TQueueDefault m
275
- => TQueue m a -> STM m [a]
276
- flushTQueue = flushTQueueDefault
277
-
278
- default newTBQueue :: TBQueue m ~ TBQueueDefault m
279
- => Natural -> STM m (TBQueue m a)
280
- newTBQueue = newTBQueueDefault
281
-
282
- default writeTBQueue :: TBQueue m ~ TBQueueDefault m
283
- => TBQueue m a -> a -> STM m ()
284
- writeTBQueue = writeTBQueueDefault
285
-
286
- default readTBQueue :: TBQueue m ~ TBQueueDefault m
287
- => TBQueue m a -> STM m a
288
- readTBQueue = readTBQueueDefault
289
-
290
- default tryReadTBQueue :: TBQueue m ~ TBQueueDefault m
291
- => TBQueue m a -> STM m (Maybe a)
292
- tryReadTBQueue = tryReadTBQueueDefault
293
-
294
- default isEmptyTBQueue :: TBQueue m ~ TBQueueDefault m
295
- => TBQueue m a -> STM m Bool
296
- isEmptyTBQueue = isEmptyTBQueueDefault
297
-
298
- default peekTBQueue :: TBQueue m ~ TBQueueDefault m
299
- => TBQueue m a -> STM m a
300
- peekTBQueue = peekTBQueueDefault
301
-
302
- default tryPeekTBQueue :: TBQueue m ~ TBQueueDefault m
303
- => TBQueue m a -> STM m (Maybe a)
304
- tryPeekTBQueue = tryPeekTBQueueDefault
305
-
306
- default isFullTBQueue :: TBQueue m ~ TBQueueDefault m
307
- => TBQueue m a -> STM m Bool
308
- isFullTBQueue = isFullTBQueueDefault
309
-
310
- default lengthTBQueue :: TBQueue m ~ TBQueueDefault m
311
- => TBQueue m a -> STM m Natural
312
- lengthTBQueue = lengthTBQueueDefault
313
-
314
- default flushTBQueue :: TBQueue m ~ TBQueueDefault m
315
- => TBQueue m a -> STM m [a]
316
- flushTBQueue = flushTBQueueDefault
317
-
318
- default unGetTBQueue :: TBQueue m ~ TBQueueDefault m
319
- => TBQueue m a -> a -> STM m ()
320
- unGetTBQueue = unGetTBQueueDefault
321
-
322
- default newTSem :: TSem m ~ TSemDefault m
323
- => Integer -> STM m (TSem m)
324
- newTSem = newTSemDefault
325
-
326
- default waitTSem :: TSem m ~ TSemDefault m
327
- => TSem m -> STM m ()
328
- waitTSem = waitTSemDefault
329
-
330
- default signalTSem :: TSem m ~ TSemDefault m
331
- => TSem m -> STM m ()
332
- signalTSem = signalTSemDefault
333
-
334
- default signalTSemN :: TSem m ~ TSemDefault m
335
- => Natural -> TSem m -> STM m ()
336
- signalTSemN = signalTSemNDefault
337
-
338
- default newTChan :: TChan m ~ TChanDefault m
339
- => STM m (TChan m a)
340
- newTChan = newTChanDefault
341
-
342
- default newBroadcastTChan :: TChan m ~ TChanDefault m
343
- => STM m (TChan m a)
344
- newBroadcastTChan = newBroadcastTChanDefault
345
-
346
- default writeTChan :: TChan m ~ TChanDefault m
347
- => TChan m a -> a -> STM m ()
348
- writeTChan = writeTChanDefault
349
-
350
- default readTChan :: TChan m ~ TChanDefault m
351
- => TChan m a -> STM m a
352
- readTChan = readTChanDefault
353
-
354
- default tryReadTChan :: TChan m ~ TChanDefault m
355
- => TChan m a -> STM m (Maybe a)
356
- tryReadTChan = tryReadTChanDefault
357
-
358
- default peekTChan :: TChan m ~ TChanDefault m
359
- => TChan m a -> STM m a
360
- peekTChan = peekTChanDefault
361
-
362
- default tryPeekTChan :: TChan m ~ TChanDefault m
363
- => TChan m a -> STM m (Maybe a)
364
- tryPeekTChan = tryPeekTChanDefault
365
-
366
- default dupTChan :: TChan m ~ TChanDefault m
367
- => TChan m a -> STM m (TChan m a)
368
- dupTChan = dupTChanDefault
369
-
370
- default unGetTChan :: TChan m ~ TChanDefault m
371
- => TChan m a -> a -> STM m ()
372
- unGetTChan = unGetTChanDefault
373
-
374
- default isEmptyTChan :: TChan m ~ TChanDefault m
375
- => TChan m a -> STM m Bool
376
- isEmptyTChan = isEmptyTChanDefault
377
-
378
- default cloneTChan :: TChan m ~ TChanDefault m
379
- => TChan m a -> STM m (TChan m a)
380
- cloneTChan = cloneTChanDefault
381
264
382
265
383
266
stateTVarDefault :: MonadSTM m => TVar m s -> (s -> (a , s )) -> STM m a
0 commit comments