@@ -433,6 +433,7 @@ class MonadSTM m
433
433
labelTArray :: (Ix i , Show i )
434
434
=> TArray m i e -> String -> STM m ()
435
435
labelTSem :: TSem m -> String -> STM m ()
436
+ labelTChan :: TChan m a -> String -> STM m ()
436
437
437
438
labelTVarIO :: TVar m a -> String -> m ()
438
439
labelTMVarIO :: TMVar m a -> String -> m ()
@@ -441,6 +442,7 @@ class MonadSTM m
441
442
labelTArrayIO :: (Ix i , Show i )
442
443
=> TArray m i e -> String -> m ()
443
444
labelTSemIO :: TSem m -> String -> m ()
445
+ labelTChanIO :: TChan m a -> String -> m ()
444
446
445
447
--
446
448
-- default implementations
@@ -462,6 +464,10 @@ class MonadSTM m
462
464
=> TSem m -> String -> STM m ()
463
465
labelTSem = labelTSemDefault
464
466
467
+ default labelTChan :: TChan m ~ TChanDefault m
468
+ => TChan m a -> String -> STM m ()
469
+ labelTChan = labelTChanDefault
470
+
465
471
default labelTArray :: ( TArray m ~ TArrayDefault m
466
472
, Ix i
467
473
, Show i
@@ -488,6 +494,9 @@ class MonadSTM m
488
494
default labelTSemIO :: TSem m -> String -> m ()
489
495
labelTSemIO = \ v l -> atomically (labelTSem v l)
490
496
497
+ default labelTChanIO :: TChan m a -> String -> m ()
498
+ labelTChanIO = \ v l -> atomically (labelTChan v l)
499
+
491
500
492
501
-- | This type class is indented for 'io-sim', where one might want to access
493
502
-- 'TVar' in the underlying 'ST' monad.
@@ -738,13 +747,15 @@ instance MonadLabelledSTM IO where
738
747
labelTBQueue = \ _ _ -> return ()
739
748
labelTArray = \ _ _ -> return ()
740
749
labelTSem = \ _ _ -> return ()
750
+ labelTChan = \ _ _ -> return ()
741
751
742
752
labelTVarIO = \ _ _ -> return ()
743
753
labelTMVarIO = \ _ _ -> return ()
744
754
labelTQueueIO = \ _ _ -> return ()
745
755
labelTBQueueIO = \ _ _ -> return ()
746
756
labelTArrayIO = \ _ _ -> return ()
747
757
labelTSemIO = \ _ _ -> return ()
758
+ labelTChanIO = \ _ _ -> return ()
748
759
749
760
-- | noop instance
750
761
--
@@ -1183,6 +1194,11 @@ data TList m a = TNil | TCons a (TVarList m a)
1183
1194
1184
1195
data TChanDefault m a = TChan (TVar m (TVarList m a )) (TVar m (TVarList m a ))
1185
1196
1197
+ labelTChanDefault :: MonadLabelledSTM m => TChanDefault m a -> String -> STM m ()
1198
+ labelTChanDefault (TChan read write) name = do
1199
+ labelTVar read (name ++ " :read" )
1200
+ labelTVar write (name ++ " :write" )
1201
+
1186
1202
newTChanDefault :: MonadSTM m => STM m (TChanDefault m a )
1187
1203
newTChanDefault = do
1188
1204
hole <- newTVar TNil
0 commit comments