|
6 | 6 | {-# LANGUAGE ExistentialQuantification #-} |
7 | 7 | {-# LANGUAGE FlexibleInstances #-} |
8 | 8 | {-# LANGUAGE GADTSyntax #-} |
| 9 | +{-# LANGUAGE InstanceSigs #-} |
9 | 10 | {-# LANGUAGE LambdaCase #-} |
10 | 11 | {-# LANGUAGE MultiParamTypeClasses #-} |
11 | 12 | {-# LANGUAGE NamedFieldPuns #-} |
@@ -616,14 +617,24 @@ instance MonadInspectMVar (IOSim s) where |
616 | 617 | MVarFull x _ -> pure (Just x) |
617 | 618 |
|
618 | 619 | 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' |
620 | 629 | 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 |
627 | 638 |
|
628 | 639 | instance MonadLabelledMVar (IOSim s) where |
629 | 640 | labelMVar = labelMVarDefault |
|
0 commit comments