Skip to content

Commit dd79d8a

Browse files
jorisdralcoot
authored andcommitted
Propage HasCallStack constraint when using checkInvariant.
1 parent 0e15988 commit dd79d8a

File tree

1 file changed

+21
-9
lines changed
  • strict-mvar/src/Control/Concurrent/Class/MonadMVar/Strict

1 file changed

+21
-9
lines changed

strict-mvar/src/Control/Concurrent/Class/MonadMVar/Strict/Checked.hs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ newEmptyMVarWithInvariant inv = StrictMVar inv <$> Lazy.newEmptyMVar
9999
newMVar :: MonadMVar m => a -> m (StrictMVar m a)
100100
newMVar !a = fromLazyMVar <$> Lazy.newMVar a
101101

102-
newMVarWithInvariant :: MonadMVar m
102+
newMVarWithInvariant :: (HasCallStack, MonadMVar m)
103103
=> (a -> Maybe String)
104104
-> a
105105
-> m (StrictMVar m a)
@@ -110,23 +110,23 @@ newMVarWithInvariant inv !a =
110110
takeMVar :: MonadMVar m => StrictMVar m a -> m a
111111
takeMVar = Lazy.takeMVar . mvar
112112

113-
putMVar :: MonadMVar m => StrictMVar m a -> a -> m ()
113+
putMVar :: (HasCallStack, MonadMVar m) => StrictMVar m a -> a -> m ()
114114
putMVar v !a = do
115115
Lazy.putMVar (mvar v) a
116116
checkInvariant (invariant v a) $ pure ()
117117

118118
readMVar :: MonadMVar m => StrictMVar m a -> m a
119119
readMVar v = Lazy.readMVar (mvar v)
120120

121-
swapMVar :: MonadMVar m => StrictMVar m a -> a -> m a
121+
swapMVar :: (HasCallStack, MonadMVar m) => StrictMVar m a -> a -> m a
122122
swapMVar v !a = do
123123
oldValue <- Lazy.swapMVar (mvar v) a
124124
checkInvariant (invariant v a) $ pure oldValue
125125

126126
tryTakeMVar :: MonadMVar m => StrictMVar m a -> m (Maybe a)
127127
tryTakeMVar v = Lazy.tryTakeMVar (mvar v)
128128

129-
tryPutMVar :: MonadMVar m => StrictMVar m a -> a -> m Bool
129+
tryPutMVar :: (HasCallStack, MonadMVar m) => StrictMVar m a -> a -> m Bool
130130
tryPutMVar v !a = do
131131
didPut <- Lazy.tryPutMVar (mvar v) a
132132
checkInvariant (invariant v a) $ pure didPut
@@ -141,11 +141,17 @@ withMVarMasked :: MonadMVar m => StrictMVar m a -> (a -> m b) -> m b
141141
withMVarMasked v = Lazy.withMVarMasked (mvar v)
142142

143143
-- | 'modifyMVar_' is defined in terms of 'modifyMVar'.
144-
modifyMVar_ :: MonadMVar m => StrictMVar m a -> (a -> m a) -> m ()
144+
modifyMVar_ :: (HasCallStack, MonadMVar m)
145+
=> StrictMVar m a
146+
-> (a -> m a)
147+
-> m ()
145148
modifyMVar_ v io = modifyMVar v io'
146149
where io' a = (,()) <$> io a
147150

148-
modifyMVar :: MonadMVar m => StrictMVar m a -> (a -> m (a,b)) -> m b
151+
modifyMVar :: (HasCallStack, MonadMVar m)
152+
=> StrictMVar m a
153+
-> (a -> m (a,b))
154+
-> m b
149155
modifyMVar v io = do
150156
(a', b) <- Lazy.modifyMVar (mvar v) io'
151157
checkInvariant (invariant v a') $ pure b
@@ -157,11 +163,17 @@ modifyMVar v io = do
157163
pure (a' , (a', b))
158164

159165
-- | 'modifyMVarMasked_' is defined in terms of 'modifyMVarMasked'.
160-
modifyMVarMasked_ :: MonadMVar m => StrictMVar m a -> (a -> m a) -> m ()
166+
modifyMVarMasked_ :: (HasCallStack, MonadMVar m)
167+
=> StrictMVar m a
168+
-> (a -> m a)
169+
-> m ()
161170
modifyMVarMasked_ v io = modifyMVar v io'
162171
where io' a = (,()) <$> io a
163172

164-
modifyMVarMasked :: MonadMVar m => StrictMVar m a -> (a -> m (a,b)) -> m b
173+
modifyMVarMasked :: (HasCallStack, MonadMVar m)
174+
=> StrictMVar m a
175+
-> (a -> m (a,b))
176+
-> m b
165177
modifyMVarMasked v io = do
166178
(a', b) <- Lazy.modifyMVar (mvar v) io'
167179
checkInvariant (invariant v a') $ pure b
@@ -185,4 +197,4 @@ tryReadMVar v = Lazy.tryReadMVar (mvar v)
185197
-- error @err@ if @mErr == Just err@.
186198
checkInvariant :: HasCallStack => Maybe String -> a -> a
187199
checkInvariant Nothing k = k
188-
checkInvariant (Just err) _ = error $ "StrictMVar invariant violation: " ++ err
200+
checkInvariant (Just err) _ = error $ "StrictMVar invariant violation: " ++ err

0 commit comments

Comments
 (0)