Skip to content

Commit c8194db

Browse files
committed
io-sim: refactored MonadTraceMVar instance
1 parent 8ef9715 commit c8194db

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

io-sim/src/Control/Monad/IOSim/Types.hs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
{-# LANGUAGE ExistentialQuantification #-}
77
{-# LANGUAGE FlexibleInstances #-}
88
{-# LANGUAGE GADTSyntax #-}
9+
{-# LANGUAGE InstanceSigs #-}
910
{-# LANGUAGE LambdaCase #-}
1011
{-# LANGUAGE MultiParamTypeClasses #-}
1112
{-# LANGUAGE NamedFieldPuns #-}
@@ -616,14 +617,24 @@ instance MonadInspectMVar (IOSim s) where
616617
MVarFull x _ -> pure (Just x)
617618

618619
instance MonadTraceMVar (IOSim s) where
619-
traceMVarIO _ (MVar mvar) f = traceTVarIO mvar traceMVarAsTVar
620+
traceMVarIO :: forall proxy a.
621+
proxy
622+
-> MVar (IOSim s) a
623+
-> ( Maybe (Maybe a)
624+
-> Maybe a
625+
-> ST s TraceValue
626+
)
627+
-> IOSim s ()
628+
traceMVarIO _ (MVar mvar) f = traceTVarIO mvar f'
620629
where
621-
traceMVarAsTVar Nothing (MVarEmpty _ _) = f Nothing Nothing
622-
traceMVarAsTVar Nothing (MVarFull a _) = f Nothing (Just a)
623-
traceMVarAsTVar (Just (MVarEmpty _ _)) (MVarEmpty _ _) = f (Just Nothing) Nothing
624-
traceMVarAsTVar (Just (MVarEmpty _ _)) (MVarFull a _) = f (Just Nothing) (Just a)
625-
traceMVarAsTVar (Just (MVarFull a _)) (MVarEmpty _ _) = f (Just (Just a)) Nothing
626-
traceMVarAsTVar (Just (MVarFull a _)) (MVarFull a' _) = f (Just (Just a)) (Just a')
630+
f' :: Maybe (MVarState m a)
631+
-> MVarState m a
632+
-> ST s TraceValue
633+
f' mst st = f (g <$> mst) (g st)
634+
635+
g :: MVarState m a -> Maybe a
636+
g MVarEmpty{} = Nothing
637+
g (MVarFull a _) = Just a
627638

628639
instance MonadLabelledMVar (IOSim s) where
629640
labelMVar = labelMVarDefault

0 commit comments

Comments
 (0)