Skip to content

Commit 5c05f93

Browse files
committed
io-sim-classes: consolidate CPP pragmas
1 parent 363ad29 commit 5c05f93

File tree

1 file changed

+21
-23
lines changed
  • io-sim-classes/src/Control/Monad/Class/MonadSTM

1 file changed

+21
-23
lines changed

io-sim-classes/src/Control/Monad/Class/MonadSTM/Strict.hs

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,8 @@ labelTVarIO v = atomically . labelTVar v
9696

9797
castStrictTVar :: LazyTVar m ~ LazyTVar n
9898
=> StrictTVar m a -> StrictTVar n a
99-
#if CHECK_TVAR_INVARIANT
100-
castStrictTVar StrictTVar{invariant, tvar} = StrictTVar{invariant, tvar}
101-
#else
102-
castStrictTVar StrictTVar{ tvar} = StrictTVar{ tvar}
103-
#endif
99+
castStrictTVar v@StrictTVar {tvar} =
100+
mkStrictTVar (getInvariant v) tvar
104101

105102
-- | Get the underlying @TVar@
106103
--
@@ -110,11 +107,8 @@ toLazyTVar :: StrictTVar m a -> LazyTVar m a
110107
toLazyTVar StrictTVar { tvar } = tvar
111108

112109
newTVar :: MonadSTM m => a -> STM m (StrictTVar m a)
113-
#if CHECK_TVAR_INVARIANT
114-
newTVar !a = StrictTVar (const Nothing) <$> Lazy.newTVar a
115-
#else
116-
newTVar !a = StrictTVar <$> Lazy.newTVar a
117-
#endif
110+
newTVar !a = (\tvar -> mkStrictTVar (const Nothing) tvar)
111+
<$> Lazy.newTVar a
118112

119113
newTVarIO :: MonadSTM m => a -> m (StrictTVar m a)
120114
newTVarIO = newTVarWithInvariantIO (const Nothing)
@@ -127,14 +121,10 @@ newTVarWithInvariantIO :: (MonadSTM m, HasCallStack)
127121
=> (a -> Maybe String) -- ^ Invariant (expect 'Nothing')
128122
-> a
129123
-> m (StrictTVar m a)
130-
#if CHECK_TVAR_INVARIANT
131124
newTVarWithInvariantIO invariant !a =
132-
checkInvariant (invariant a) $
133-
StrictTVar invariant <$> Lazy.newTVarIO a
134-
#else
135-
newTVarWithInvariantIO _invariant !a =
136-
StrictTVar <$> Lazy.newTVarIO a
137-
#endif
125+
checkInvariant (invariant a) $
126+
(\tvar -> mkStrictTVar invariant tvar)
127+
<$> Lazy.newTVarIO a
138128

139129
newTVarWithInvariantM :: (MonadSTM m, HasCallStack)
140130
=> (a -> Maybe String) -- ^ Invariant (expect 'Nothing')
@@ -151,9 +141,7 @@ readTVarIO StrictTVar { tvar } = Lazy.readTVarIO tvar
151141

152142
writeTVar :: (MonadSTM m, HasCallStack) => StrictTVar m a -> a -> STM m ()
153143
writeTVar v !a =
154-
#if CHECK_TVAR_INVARIANT
155-
checkInvariant (invariant v a) $
156-
#endif
144+
checkInvariant (getInvariant v a) $
157145
Lazy.writeTVar (tvar v) a
158146

159147
modifyTVar :: MonadSTM m => StrictTVar m a -> (a -> a) -> STM m ()
@@ -246,6 +234,9 @@ isEmptyTMVar (StrictTMVar tmvar) = Lazy.isEmptyTMVar tmvar
246234
Dealing with invariants
247235
-------------------------------------------------------------------------------}
248236

237+
getInvariant :: StrictTVar m a -> a -> Maybe String
238+
mkStrictTVar :: (a -> Maybe String) -> Lazy.TVar m a -> StrictTVar m a
239+
249240
-- | Check invariant (if enabled) before continuing
250241
--
251242
-- @checkInvariant mErr x@ is equal to @x@ if @mErr == Nothing@, and throws
@@ -255,9 +246,16 @@ isEmptyTMVar (StrictTMVar tmvar) = Lazy.isEmptyTMVar tmvar
255246
-- invariants can reuse the same logic, rather than having to introduce new
256247
-- per-package flags.
257248
checkInvariant :: HasCallStack => Maybe String -> a -> a
249+
258250
#if CHECK_TVAR_INVARIANT
259-
checkInvariant Nothing k = k
260-
checkInvariant (Just err) _ = error $ "Invariant violation: " ++ err
251+
getInvariant StrictTVar {invariant} = invariant
252+
mkStrictTVar invariant tvar = StrictTVar {invariant, tvar}
253+
254+
checkInvariant Nothing k = k
255+
checkInvariant (Just err) _ = error $ "Invariant violation: " ++ err
261256
#else
262-
checkInvariant _err k = k
257+
getInvariant _ = \_ -> Nothing
258+
mkStrictTVar _invariant tvar = StrictTVar {tvar}
259+
260+
checkInvariant _err k = k
263261
#endif

0 commit comments

Comments
 (0)