Skip to content

Commit 540d50a

Browse files
committed
strict-stm: fromLazyTVar
1 parent cf107e9 commit 540d50a

File tree

1 file changed

+17
-1
lines changed
  • strict-stm/src/Control/Monad/Class/MonadSTM

1 file changed

+17
-1
lines changed

strict-stm/src/Control/Monad/Class/MonadSTM/Strict.hs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module Control.Monad.Class.MonadSTM.Strict
1818
, labelTVarIO
1919
, castStrictTVar
2020
, toLazyTVar
21+
, fromLazyTVar
2122
, newTVar
2223
, newTVarIO
2324
, newTVarWithInvariantIO
@@ -32,6 +33,8 @@ module Control.Monad.Class.MonadSTM.Strict
3233
, labelTMVar
3334
, labelTMVarIO
3435
, castStrictTMVar
36+
, toLazyTMVar
37+
, fromLazyTMVar
3538
, newTMVar
3639
, newTMVarIO
3740
, newEmptyTMVar
@@ -106,6 +109,16 @@ castStrictTVar v@StrictTVar {tvar} =
106109
toLazyTVar :: StrictTVar m a -> LazyTVar m a
107110
toLazyTVar StrictTVar { tvar } = tvar
108111

112+
fromLazyTVar :: LazyTVar m a -> StrictTVar m a
113+
fromLazyTVar tvar =
114+
#if CHECK_TVAR_INVARIANT
115+
StrictTVar { invariant = const Nothing
116+
, tvar
117+
}
118+
#else
119+
StrictTVar { tvar }
120+
#endif
121+
109122
newTVar :: MonadSTM m => a -> STM m (StrictTVar m a)
110123
newTVar !a = (\tvar -> mkStrictTVar (const Nothing) tvar)
111124
<$> Lazy.newTVar a
@@ -174,7 +187,10 @@ updateTVar = stateTVar
174187
-- Does not support an invariant: if the invariant would not be satisfied,
175188
-- we would not be able to put a value into an empty TMVar, which would lead
176189
-- to very hard to debug bugs where code is blocked indefinitely.
177-
newtype StrictTMVar m a = StrictTMVar (LazyTMVar m a)
190+
newtype StrictTMVar m a = StrictTMVar { toLazyTMVar :: LazyTMVar m a }
191+
192+
fromLazyTMVar :: LazyTMVar m a -> StrictTMVar m a
193+
fromLazyTMVar = StrictTMVar
178194

179195
labelTMVar :: MonadLabelledSTM m => StrictTMVar m a -> String -> STM m ()
180196
labelTMVar (StrictTMVar tvar) = Lazy.labelTMVar tvar

0 commit comments

Comments
 (0)