Skip to content

Commit 049db46

Browse files
committed
io-sim: labelTVarIO and traceTVarIO in ST
Implemented both calls using `LiftST` rather than executing an `STM` transaction. The primary benefit is a simpler trace.
1 parent ac6ec44 commit 049db46

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

io-sim/src/Control/Monad/IOSim/Types.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,10 @@ instance MonadSay (STMSim s) where
468468

469469
instance MonadLabelledSTM (IOSim s) where
470470
labelTVar tvar label = STM $ \k -> LabelTVar label tvar (k ())
471+
labelTVarIO tvar label = IOSim $ oneShot $ \k ->
472+
LiftST ( lazyToStrictST $
473+
writeSTRef (tvarLabel tvar) $! (Just label)
474+
) k
471475
labelTQueue = labelTQueueDefault
472476
labelTBQueue = labelTBQueueDefault
473477

@@ -552,6 +556,10 @@ instance MonadInspectSTM (IOSim s) where
552556
--
553557
instance MonadTraceSTM (IOSim s) where
554558
traceTVar _ tvar f = STM $ \k -> TraceTVar tvar f (k ())
559+
traceTVarIO tvar f = IOSim $ oneShot $ \k ->
560+
LiftST ( lazyToStrictST $
561+
writeSTRef (tvarTrace tvar) $! Just f
562+
) k
555563
traceTQueue = traceTQueueDefault
556564
traceTBQueue = traceTBQueueDefault
557565

0 commit comments

Comments
 (0)