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
3132import Data.Array.Base (MArray (.. ))
3233import Data.Function (on )
3334import 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--
166181instance (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--
244272instance (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--
322363instance 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--
400454instance 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--
478545instance 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--
556636instance (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--
634727instance (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)
0 commit comments