Skip to content

Commit 3466a2e

Browse files
committed
Added transformer instances for MonadInspectSTM and MonadTraceSTM
* ContT * ReaderT * WriterT * StateT * RWST
1 parent db0e67c commit 3466a2e

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed

io-classes/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
* Added `threadLabel` to `MonadThread`
88
* Added `MonadLabelledMVar` class.
99

10+
### Non-breaking changes
11+
12+
* Added monad transformer instances for `MonadInspectSTM` & `MonadTraceSTM`
13+
type classes.
14+
1015
### 1.7.0.0
1116

1217
### Breaking changes

io-classes/mtl/Control/Monad/Class/MonadSTM/Trans.hs

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
66
{-# LANGUAGE KindSignatures #-}
77
{-# LANGUAGE MultiParamTypeClasses #-}
8+
{-# LANGUAGE ScopedTypeVariables #-}
89
{-# LANGUAGE StandaloneDeriving #-}
910
{-# LANGUAGE TypeFamilies #-}
1011

@@ -31,6 +32,7 @@ import Control.Monad.Class.MonadThrow qualified as MonadThrow
3132
import Data.Array.Base (MArray (..))
3233
import Data.Function (on)
3334
import Data.Kind (Type)
35+
import Data.Proxy (Proxy (..))
3436

3537

3638
-- | A newtype wrapper for an 'STM' monad for 'ContT'
@@ -161,6 +163,19 @@ instance MonadSTM m => MonadSTM (ContT r m) where
161163
isEmptyTChan = ContTSTM . isEmptyTChan
162164

163165

166+
instance MonadInspectSTM m => MonadInspectSTM (ContT r m) where
167+
type InspectMonad (ContT r m) = InspectMonad m
168+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
169+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
170+
171+
instance MonadTraceSTM m => MonadTraceSTM (ContT r m) where
172+
traceTVar _ = ContTSTM .: traceTVar Proxy
173+
traceTMVar _ = ContTSTM .: traceTMVar Proxy
174+
traceTQueue _ = ContTSTM .: traceTQueue Proxy
175+
traceTBQueue _ = ContTSTM .: traceTBQueue Proxy
176+
traceTSem _ = ContTSTM .: traceTSem Proxy
177+
178+
164179
-- | The underlying stm monad is also transformed.
165180
--
166181
instance (Monoid w, MonadSTM m) => MonadSTM (Lazy.WriterT w m) where
@@ -239,6 +254,19 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Lazy.WriterT w m) where
239254
isEmptyTChan = lift . isEmptyTChan
240255

241256

257+
instance (Monoid w, MonadInspectSTM m) => MonadInspectSTM (Lazy.WriterT w m) where
258+
type InspectMonad (Lazy.WriterT w m) = InspectMonad m
259+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
260+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
261+
262+
instance (Monoid w, MonadTraceSTM m) => MonadTraceSTM (Lazy.WriterT w m) where
263+
traceTVar _ = lift .: traceTVar Proxy
264+
traceTMVar _ = lift .: traceTMVar Proxy
265+
traceTQueue _ = lift .: traceTQueue Proxy
266+
traceTBQueue _ = lift .: traceTBQueue Proxy
267+
traceTSem _ = lift .: traceTSem Proxy
268+
269+
242270
-- | The underlying stm monad is also transformed.
243271
--
244272
instance (Monoid w, MonadSTM m) => MonadSTM (Strict.WriterT w m) where
@@ -317,6 +345,19 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Strict.WriterT w m) where
317345
isEmptyTChan = lift . isEmptyTChan
318346

319347

348+
instance (Monoid w, MonadInspectSTM m) => MonadInspectSTM (Strict.WriterT w m) where
349+
type InspectMonad (Strict.WriterT w m) = InspectMonad m
350+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
351+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
352+
353+
instance (Monoid w, MonadTraceSTM m) => MonadTraceSTM (Strict.WriterT w m) where
354+
traceTVar _ = lift .: traceTVar Proxy
355+
traceTMVar _ = lift .: traceTMVar Proxy
356+
traceTQueue _ = lift .: traceTQueue Proxy
357+
traceTBQueue _ = lift .: traceTBQueue Proxy
358+
traceTSem _ = lift .: traceTSem Proxy
359+
360+
320361
-- | The underlying stm monad is also transformed.
321362
--
322363
instance MonadSTM m => MonadSTM (Lazy.StateT s m) where
@@ -395,6 +436,19 @@ instance MonadSTM m => MonadSTM (Lazy.StateT s m) where
395436
isEmptyTChan = lift . isEmptyTChan
396437

397438

439+
instance MonadInspectSTM m => MonadInspectSTM (Lazy.StateT s m) where
440+
type InspectMonad (Lazy.StateT s m) = InspectMonad m
441+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
442+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
443+
444+
instance MonadTraceSTM m => MonadTraceSTM (Lazy.StateT s m) where
445+
traceTVar _ = lift .: traceTVar Proxy
446+
traceTMVar _ = lift .: traceTMVar Proxy
447+
traceTQueue _ = lift .: traceTQueue Proxy
448+
traceTBQueue _ = lift .: traceTBQueue Proxy
449+
traceTSem _ = lift .: traceTSem Proxy
450+
451+
398452
-- | The underlying stm monad is also transformed.
399453
--
400454
instance MonadSTM m => MonadSTM (Strict.StateT s m) where
@@ -473,6 +527,19 @@ instance MonadSTM m => MonadSTM (Strict.StateT s m) where
473527
isEmptyTChan = lift . isEmptyTChan
474528

475529

530+
instance MonadInspectSTM m => MonadInspectSTM (Strict.StateT s m) where
531+
type InspectMonad (Strict.StateT s m) = InspectMonad m
532+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
533+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
534+
535+
instance MonadTraceSTM m => MonadTraceSTM (Strict.StateT s m) where
536+
traceTVar _ = lift .: traceTVar Proxy
537+
traceTMVar _ = lift .: traceTMVar Proxy
538+
traceTQueue _ = lift .: traceTQueue Proxy
539+
traceTBQueue _ = lift .: traceTBQueue Proxy
540+
traceTSem _ = lift .: traceTSem Proxy
541+
542+
476543
-- | The underlying stm monad is also transformed.
477544
--
478545
instance MonadSTM m => MonadSTM (ExceptT e m) where
@@ -551,6 +618,19 @@ instance MonadSTM m => MonadSTM (ExceptT e m) where
551618
isEmptyTChan = lift . isEmptyTChan
552619

553620

621+
instance MonadInspectSTM m => MonadInspectSTM (ExceptT e m) where
622+
type InspectMonad (ExceptT e m) = InspectMonad m
623+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
624+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
625+
626+
instance MonadTraceSTM m => MonadTraceSTM (ExceptT e m) where
627+
traceTVar _ = lift .: traceTVar Proxy
628+
traceTMVar _ = lift .: traceTMVar Proxy
629+
traceTQueue _ = lift .: traceTQueue Proxy
630+
traceTBQueue _ = lift .: traceTBQueue Proxy
631+
traceTSem _ = lift .: traceTSem Proxy
632+
633+
554634
-- | The underlying stm monad is also transformed.
555635
--
556636
instance (Monoid w, MonadSTM m) => MonadSTM (Lazy.RWST r w s m) where
@@ -629,6 +709,19 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Lazy.RWST r w s m) where
629709
isEmptyTChan = lift . isEmptyTChan
630710

631711

712+
instance (Monoid w, MonadInspectSTM m) => MonadInspectSTM (Lazy.RWST r w s m) where
713+
type InspectMonad (Lazy.RWST r w s m) = InspectMonad m
714+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
715+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
716+
717+
instance (Monoid w, MonadTraceSTM m) => MonadTraceSTM (Lazy.RWST r w s m) where
718+
traceTVar _ = lift .: traceTVar Proxy
719+
traceTMVar _ = lift .: traceTMVar Proxy
720+
traceTQueue _ = lift .: traceTQueue Proxy
721+
traceTBQueue _ = lift .: traceTBQueue Proxy
722+
traceTSem _ = lift .: traceTSem Proxy
723+
724+
632725
-- | The underlying stm monad is also transformed.
633726
--
634727
instance (Monoid w, MonadSTM m) => MonadSTM (Strict.RWST r w s m) where
@@ -707,5 +800,18 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Strict.RWST r w s m) where
707800
isEmptyTChan = lift . isEmptyTChan
708801

709802

803+
instance (Monoid w, MonadInspectSTM m) => MonadInspectSTM (Strict.RWST r w s m) where
804+
type InspectMonad (Strict.RWST r w s m) = InspectMonad m
805+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
806+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
807+
808+
instance (Monoid w, MonadTraceSTM m) => MonadTraceSTM (Strict.RWST r w s m) where
809+
traceTVar _ = lift .: traceTVar Proxy
810+
traceTMVar _ = lift .: traceTMVar Proxy
811+
traceTQueue _ = lift .: traceTQueue Proxy
812+
traceTBQueue _ = lift .: traceTBQueue Proxy
813+
traceTSem _ = lift .: traceTSem Proxy
814+
815+
710816
(.:) :: (c -> d) -> (a -> b -> c) -> (a -> b -> d)
711817
(f .: g) x y = f (g x y)

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,6 +1247,17 @@ instance MonadSTM m => MonadSTM (ReaderT r m) where
12471247
unGetTChan = lift .: unGetTChan
12481248
isEmptyTChan = lift . isEmptyTChan
12491249

1250+
instance MonadInspectSTM m => MonadInspectSTM (ReaderT r m) where
1251+
type InspectMonad (ReaderT r m) = InspectMonad m
1252+
inspectTVar _ = inspectTVar (Proxy :: Proxy m)
1253+
inspectTMVar _ = inspectTMVar (Proxy :: Proxy m)
1254+
1255+
instance MonadTraceSTM m => MonadTraceSTM (ReaderT r m) where
1256+
traceTVar _ = lift .: traceTVar Proxy
1257+
traceTMVar _ = lift .: traceTMVar Proxy
1258+
traceTQueue _ = lift .: traceTQueue Proxy
1259+
traceTBQueue _ = lift .: traceTBQueue Proxy
1260+
traceTSem _ = lift .: traceTSem Proxy
12501261

12511262
(.:) :: (c -> d) -> (a -> b -> c) -> (a -> b -> d)
12521263
(f .: g) x y = f (g x y)

0 commit comments

Comments
 (0)