Skip to content

Commit 99bafef

Browse files
committed
Show-based default traceT[M]VarShow functions
1 parent d5b435b commit 99bafef

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

io-classes/src/Control/Concurrent/Class/MonadSTM/TMVar.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ module Control.Concurrent.Class.MonadSTM.TMVar
2626
-- * MonadTraceSTM
2727
, traceTMVar
2828
, traceTMVarIO
29+
, traceTMVarShow
30+
, traceTMVarShowIO
2931
) where
3032

3133
import Control.Monad.Class.MonadSTM.Internal

io-classes/src/Control/Concurrent/Class/MonadSTM/TVar.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ module Control.Concurrent.Class.MonadSTM.TVar
2121
-- * MonadTraceSTM
2222
, traceTVar
2323
, traceTVarIO
24+
, traceTVarShow
25+
, traceTVarShowIO
2426
) where
2527

2628
import Control.Monad.Class.MonadSTM.Internal

io-classes/src/Control/Monad/Class/MonadSTM/Internal.hs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ module Control.Monad.Class.MonadSTM.Internal
103103
-- * WithTMVar
104104
, withTMVar
105105
, withTMVarAnd
106+
-- * Trace tvar and tmvar
107+
, traceTVarShow
108+
, traceTVarShowIO
109+
, traceTMVarShow
110+
, traceTMVarShowIO
106111
) where
107112

108113
import Prelude hiding (read)
@@ -539,6 +544,51 @@ class MonadInspectSTM m
539544
-> m ()
540545
traceTSemIO = \v f -> atomically (traceTSem Proxy v f)
541546

547+
traceTVarShow :: (MonadTraceSTM m, Show a)
548+
=> proxy m
549+
-> TVar m a
550+
-> STM m ()
551+
traceTVarShow p tvar =
552+
traceTVar p tvar (\pv v -> pure $ TraceString $ case (pv, v) of
553+
(Nothing, st') -> "Created: " <> show st'
554+
(Just st', st'') -> "Modified: " <> show st' <> " -> " <> show st''
555+
)
556+
557+
traceTVarShowIO :: (MonadTraceSTM m, Show a)
558+
=> TVar m a
559+
-> m ()
560+
traceTVarShowIO tvar =
561+
traceTVarIO tvar (\pv v -> pure $ TraceString $ case (pv, v) of
562+
(Nothing, st') -> "Created: " <> show st'
563+
(Just st', st'') -> "Modified: " <> show st' <> " -> " <> show st''
564+
)
565+
566+
traceTMVarShow :: (MonadTraceSTM m, Show a)
567+
=> proxy m
568+
-> TMVar m a
569+
-> STM m ()
570+
traceTMVarShow p tmvar =
571+
traceTMVar p tmvar (\pv v -> pure $ TraceString $ case (pv, v) of
572+
(Nothing, Nothing) -> "Created empty"
573+
(Nothing, Just st') -> "Created full: " <> show st'
574+
(Just Nothing, Just st') -> "Put: " <> show st'
575+
(Just Nothing, Nothing) -> "Remains empty"
576+
(Just Just{}, Nothing) -> "Take"
577+
(Just (Just st'), Just st'') -> "Modified: " <> show st' <> " -> " <> show st''
578+
)
579+
580+
traceTMVarShowIO :: (Show a, MonadTraceSTM m)
581+
=> TMVar m a
582+
-> m ()
583+
traceTMVarShowIO tmvar =
584+
traceTMVarIO tmvar (\pv v -> pure $ TraceString $ case (pv, v) of
585+
(Nothing, Nothing) -> "Created empty"
586+
(Nothing, Just st') -> "Created full: " <> show st'
587+
(Just Nothing, Just st') -> "Put: " <> show st'
588+
(Just Nothing, Nothing) -> "Remains empty"
589+
(Just Just{}, Nothing) -> "Take"
590+
(Just (Just st'), Just st'') -> "Modified: " <> show st' <> " -> " <> show st''
591+
)
542592

543593
--
544594
-- Instance for IO uses the existing STM library implementations

io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TMVar.hs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ module Control.Concurrent.Class.MonadSTM.Strict.TMVar
3333
-- * MonadTraceSTM
3434
, traceTMVar
3535
, traceTMVarIO
36+
, traceTMVarShow
37+
, traceTMVarShowIO
3638
) where
3739

3840

@@ -61,12 +63,23 @@ traceTMVar :: MonadTraceSTM m
6163
-> STM m ()
6264
traceTMVar p (StrictTMVar var) = Lazy.traceTMVar p var
6365

66+
traceTMVarShow :: (MonadTraceSTM m, Show a)
67+
=> proxy m
68+
-> StrictTMVar m a
69+
-> STM m ()
70+
traceTMVarShow p (StrictTMVar var) = Lazy.traceTMVarShow p var
71+
6472
traceTMVarIO :: MonadTraceSTM m
6573
=> StrictTMVar m a
6674
-> (Maybe (Maybe a) -> (Maybe a) -> InspectMonad m TraceValue)
6775
-> m ()
6876
traceTMVarIO (StrictTMVar var) = Lazy.traceTMVarIO var
6977

78+
traceTMVarShowIO :: (MonadTraceSTM m, Show a)
79+
=> StrictTMVar m a
80+
-> m ()
81+
traceTMVarShowIO (StrictTMVar var) = Lazy.traceTMVarShowIO var
82+
7083
castStrictTMVar :: LazyTMVar m ~ LazyTMVar n
7184
=> StrictTMVar m a -> StrictTMVar n a
7285
castStrictTMVar (StrictTMVar var) = StrictTMVar var

io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TVar.hs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ module Control.Concurrent.Class.MonadSTM.Strict.TVar
2727
-- * MonadTraceSTM
2828
, traceTVar
2929
, traceTVarIO
30+
, traceTVarShow
31+
, traceTVarShowIO
3032
) where
3133

3234
import Control.Concurrent.Class.MonadSTM.TVar qualified as Lazy
@@ -51,12 +53,23 @@ traceTVar :: MonadTraceSTM m
5153
-> STM m ()
5254
traceTVar p StrictTVar {tvar} = Lazy.traceTVar p tvar
5355

56+
traceTVarShow :: (MonadTraceSTM m, Show a)
57+
=> proxy m
58+
-> StrictTVar m a
59+
-> STM m ()
60+
traceTVarShow p StrictTVar {tvar} = Lazy.traceTVarShow p tvar
61+
5462
traceTVarIO :: MonadTraceSTM m
5563
=> StrictTVar m a
5664
-> (Maybe a -> a -> InspectMonad m TraceValue)
5765
-> m ()
5866
traceTVarIO StrictTVar {tvar} = Lazy.traceTVarIO tvar
5967

68+
traceTVarShowIO :: (MonadTraceSTM m, Show a)
69+
=> StrictTVar m a
70+
-> m ()
71+
traceTVarShowIO StrictTVar {tvar} = Lazy.traceTVarShowIO tvar
72+
6073
-- | Cast the monad if both use the same representation of `TVar`s.
6174
--
6275
-- This function is useful for monad transformers stacks if the `TVar` is used

0 commit comments

Comments
 (0)