55{-# LANGUAGE GeneralizedNewtypeDeriving #-}
66{-# LANGUAGE KindSignatures #-}
77{-# LANGUAGE MultiParamTypeClasses #-}
8+ {-# LANGUAGE ScopedTypeVariables #-}
89{-# LANGUAGE StandaloneDeriving #-}
10+ {-# LANGUAGE TypeApplications #-}
911{-# LANGUAGE TypeFamilies #-}
1012
1113-- undecidable instances needed for 'ContTSTM' instances of
@@ -31,6 +33,7 @@ import Control.Monad.Class.MonadThrow qualified as MonadThrow
3133import Data.Array.Base (MArray (.. ))
3234import Data.Function (on )
3335import Data.Kind (Type )
36+ import Data.Proxy (Proxy (.. ))
3437
3538
3639-- | A newtype wrapper for an 'STM' monad for 'ContT'
@@ -161,6 +164,19 @@ instance MonadSTM m => MonadSTM (ContT r m) where
161164 isEmptyTChan = ContTSTM . isEmptyTChan
162165
163166
167+ instance MonadInspectSTM m => MonadInspectSTM (ContT r m ) where
168+ type InspectMonad (ContT r m ) = InspectMonad m
169+ inspectTVar _ = inspectTVar (Proxy @ m )
170+ inspectTMVar _ = inspectTMVar (Proxy @ m )
171+
172+ instance MonadTraceSTM m => MonadTraceSTM (ContT r m ) where
173+ traceTVar _ = ContTSTM .: traceTVar (Proxy @ m )
174+ traceTMVar _ = ContTSTM .: traceTMVar (Proxy @ m )
175+ traceTQueue _ = ContTSTM .: traceTQueue (Proxy @ m )
176+ traceTBQueue _ = ContTSTM .: traceTBQueue (Proxy @ m )
177+ traceTSem _ = ContTSTM .: traceTSem (Proxy @ m )
178+
179+
164180-- | The underlying stm monad is also transformed.
165181--
166182instance (Monoid w , MonadSTM m ) => MonadSTM (Lazy. WriterT w m ) where
@@ -239,6 +255,19 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Lazy.WriterT w m) where
239255 isEmptyTChan = lift . isEmptyTChan
240256
241257
258+ instance (Monoid w , MonadInspectSTM m ) => MonadInspectSTM (Lazy. WriterT w m ) where
259+ type InspectMonad (Lazy. WriterT w m ) = InspectMonad m
260+ inspectTVar _ = inspectTVar (Proxy @ m )
261+ inspectTMVar _ = inspectTMVar (Proxy @ m )
262+
263+ instance (Monoid w , MonadTraceSTM m ) => MonadTraceSTM (Lazy. WriterT w m ) where
264+ traceTVar _ = lift .: traceTVar (Proxy @ m )
265+ traceTMVar _ = lift .: traceTMVar (Proxy @ m )
266+ traceTQueue _ = lift .: traceTQueue (Proxy @ m )
267+ traceTBQueue _ = lift .: traceTBQueue (Proxy @ m )
268+ traceTSem _ = lift .: traceTSem (Proxy @ m )
269+
270+
242271-- | The underlying stm monad is also transformed.
243272--
244273instance (Monoid w , MonadSTM m ) => MonadSTM (Strict. WriterT w m ) where
@@ -317,6 +346,19 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Strict.WriterT w m) where
317346 isEmptyTChan = lift . isEmptyTChan
318347
319348
349+ instance (Monoid w , MonadInspectSTM m ) => MonadInspectSTM (Strict. WriterT w m ) where
350+ type InspectMonad (Strict. WriterT w m ) = InspectMonad m
351+ inspectTVar _ = inspectTVar (Proxy @ m )
352+ inspectTMVar _ = inspectTMVar (Proxy @ m )
353+
354+ instance (Monoid w , MonadTraceSTM m ) => MonadTraceSTM (Strict. WriterT w m ) where
355+ traceTVar _ = lift .: traceTVar (Proxy @ m )
356+ traceTMVar _ = lift .: traceTMVar (Proxy @ m )
357+ traceTQueue _ = lift .: traceTQueue (Proxy @ m )
358+ traceTBQueue _ = lift .: traceTBQueue (Proxy @ m )
359+ traceTSem _ = lift .: traceTSem (Proxy @ m )
360+
361+
320362-- | The underlying stm monad is also transformed.
321363--
322364instance MonadSTM m => MonadSTM (Lazy. StateT s m ) where
@@ -395,6 +437,19 @@ instance MonadSTM m => MonadSTM (Lazy.StateT s m) where
395437 isEmptyTChan = lift . isEmptyTChan
396438
397439
440+ instance MonadInspectSTM m => MonadInspectSTM (Lazy. StateT s m ) where
441+ type InspectMonad (Lazy. StateT s m ) = InspectMonad m
442+ inspectTVar _ = inspectTVar (Proxy @ m )
443+ inspectTMVar _ = inspectTMVar (Proxy @ m )
444+
445+ instance MonadTraceSTM m => MonadTraceSTM (Lazy. StateT s m ) where
446+ traceTVar _ = lift .: traceTVar (Proxy @ m )
447+ traceTMVar _ = lift .: traceTMVar (Proxy @ m )
448+ traceTQueue _ = lift .: traceTQueue (Proxy @ m )
449+ traceTBQueue _ = lift .: traceTBQueue (Proxy @ m )
450+ traceTSem _ = lift .: traceTSem (Proxy @ m )
451+
452+
398453-- | The underlying stm monad is also transformed.
399454--
400455instance MonadSTM m => MonadSTM (Strict. StateT s m ) where
@@ -473,6 +528,19 @@ instance MonadSTM m => MonadSTM (Strict.StateT s m) where
473528 isEmptyTChan = lift . isEmptyTChan
474529
475530
531+ instance MonadInspectSTM m => MonadInspectSTM (Strict. StateT s m ) where
532+ type InspectMonad (Strict. StateT s m ) = InspectMonad m
533+ inspectTVar _ = inspectTVar (Proxy @ m )
534+ inspectTMVar _ = inspectTMVar (Proxy @ m )
535+
536+ instance MonadTraceSTM m => MonadTraceSTM (Strict. StateT s m ) where
537+ traceTVar _ = lift .: traceTVar (Proxy @ m )
538+ traceTMVar _ = lift .: traceTMVar (Proxy @ m )
539+ traceTQueue _ = lift .: traceTQueue (Proxy @ m )
540+ traceTBQueue _ = lift .: traceTBQueue (Proxy @ m )
541+ traceTSem _ = lift .: traceTSem (Proxy @ m )
542+
543+
476544-- | The underlying stm monad is also transformed.
477545--
478546instance MonadSTM m => MonadSTM (ExceptT e m ) where
@@ -551,6 +619,19 @@ instance MonadSTM m => MonadSTM (ExceptT e m) where
551619 isEmptyTChan = lift . isEmptyTChan
552620
553621
622+ instance MonadInspectSTM m => MonadInspectSTM (ExceptT e m ) where
623+ type InspectMonad (ExceptT e m ) = InspectMonad m
624+ inspectTVar _ = inspectTVar (Proxy @ m )
625+ inspectTMVar _ = inspectTMVar (Proxy @ m )
626+
627+ instance MonadTraceSTM m => MonadTraceSTM (ExceptT e m ) where
628+ traceTVar _ = lift .: traceTVar (Proxy @ m )
629+ traceTMVar _ = lift .: traceTMVar (Proxy @ m )
630+ traceTQueue _ = lift .: traceTQueue (Proxy @ m )
631+ traceTBQueue _ = lift .: traceTBQueue (Proxy @ m )
632+ traceTSem _ = lift .: traceTSem (Proxy @ m )
633+
634+
554635-- | The underlying stm monad is also transformed.
555636--
556637instance (Monoid w , MonadSTM m ) => MonadSTM (Lazy. RWST r w s m ) where
@@ -629,6 +710,19 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Lazy.RWST r w s m) where
629710 isEmptyTChan = lift . isEmptyTChan
630711
631712
713+ instance (Monoid w , MonadInspectSTM m ) => MonadInspectSTM (Lazy. RWST r w s m ) where
714+ type InspectMonad (Lazy. RWST r w s m ) = InspectMonad m
715+ inspectTVar _ = inspectTVar (Proxy @ m )
716+ inspectTMVar _ = inspectTMVar (Proxy @ m )
717+
718+ instance (Monoid w , MonadTraceSTM m ) => MonadTraceSTM (Lazy. RWST r w s m ) where
719+ traceTVar _ = lift .: traceTVar (Proxy @ m )
720+ traceTMVar _ = lift .: traceTMVar (Proxy @ m )
721+ traceTQueue _ = lift .: traceTQueue (Proxy @ m )
722+ traceTBQueue _ = lift .: traceTBQueue (Proxy @ m )
723+ traceTSem _ = lift .: traceTSem (Proxy @ m )
724+
725+
632726-- | The underlying stm monad is also transformed.
633727--
634728instance (Monoid w , MonadSTM m ) => MonadSTM (Strict. RWST r w s m ) where
@@ -707,5 +801,18 @@ instance (Monoid w, MonadSTM m) => MonadSTM (Strict.RWST r w s m) where
707801 isEmptyTChan = lift . isEmptyTChan
708802
709803
804+ instance (Monoid w , MonadInspectSTM m ) => MonadInspectSTM (Strict. RWST r w s m ) where
805+ type InspectMonad (Strict. RWST r w s m ) = InspectMonad m
806+ inspectTVar _ = inspectTVar (Proxy @ m )
807+ inspectTMVar _ = inspectTMVar (Proxy @ m )
808+
809+ instance (Monoid w , MonadTraceSTM m ) => MonadTraceSTM (Strict. RWST r w s m ) where
810+ traceTVar _ = lift .: traceTVar (Proxy @ m )
811+ traceTMVar _ = lift .: traceTMVar (Proxy @ m )
812+ traceTQueue _ = lift .: traceTQueue (Proxy @ m )
813+ traceTBQueue _ = lift .: traceTBQueue (Proxy @ m )
814+ traceTSem _ = lift .: traceTSem (Proxy @ m )
815+
816+
710817(.:) :: (c -> d ) -> (a -> b -> c ) -> (a -> b -> d )
711818(f .: g) x y = f (g x y)
0 commit comments