5
5
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
6
6
{-# LANGUAGE KindSignatures #-}
7
7
{-# LANGUAGE MultiParamTypeClasses #-}
8
+ {-# LANGUAGE ScopedTypeVariables #-}
8
9
{-# LANGUAGE StandaloneDeriving #-}
10
+ {-# LANGUAGE TypeApplications #-}
9
11
{-# LANGUAGE TypeFamilies #-}
10
12
11
13
-- undecidable instances needed for 'ContTSTM' instances of
@@ -31,6 +33,7 @@ import Control.Monad.Class.MonadThrow qualified as MonadThrow
31
33
import Data.Array.Base (MArray (.. ))
32
34
import Data.Function (on )
33
35
import Data.Kind (Type )
36
+ import Data.Proxy (Proxy (.. ))
34
37
35
38
36
39
-- | A newtype wrapper for an 'STM' monad for 'ContT'
@@ -161,6 +164,19 @@ instance MonadSTM m => MonadSTM (ContT r m) where
161
164
isEmptyTChan = ContTSTM . isEmptyTChan
162
165
163
166
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
+
164
180
-- | The underlying stm monad is also transformed.
165
181
--
166
182
instance (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
239
255
isEmptyTChan = lift . isEmptyTChan
240
256
241
257
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
+
242
271
-- | The underlying stm monad is also transformed.
243
272
--
244
273
instance (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
317
346
isEmptyTChan = lift . isEmptyTChan
318
347
319
348
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
+
320
362
-- | The underlying stm monad is also transformed.
321
363
--
322
364
instance MonadSTM m => MonadSTM (Lazy. StateT s m ) where
@@ -395,6 +437,19 @@ instance MonadSTM m => MonadSTM (Lazy.StateT s m) where
395
437
isEmptyTChan = lift . isEmptyTChan
396
438
397
439
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
+
398
453
-- | The underlying stm monad is also transformed.
399
454
--
400
455
instance MonadSTM m => MonadSTM (Strict. StateT s m ) where
@@ -473,6 +528,19 @@ instance MonadSTM m => MonadSTM (Strict.StateT s m) where
473
528
isEmptyTChan = lift . isEmptyTChan
474
529
475
530
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
+
476
544
-- | The underlying stm monad is also transformed.
477
545
--
478
546
instance MonadSTM m => MonadSTM (ExceptT e m ) where
@@ -551,6 +619,19 @@ instance MonadSTM m => MonadSTM (ExceptT e m) where
551
619
isEmptyTChan = lift . isEmptyTChan
552
620
553
621
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
+
554
635
-- | The underlying stm monad is also transformed.
555
636
--
556
637
instance (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
629
710
isEmptyTChan = lift . isEmptyTChan
630
711
631
712
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
+
632
726
-- | The underlying stm monad is also transformed.
633
727
--
634
728
instance (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
707
801
isEmptyTChan = lift . isEmptyTChan
708
802
709
803
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
+
710
817
(.:) :: (c -> d ) -> (a -> b -> c ) -> (a -> b -> d )
711
818
(f .: g) x y = f (g x y)
0 commit comments