@@ -0,0 +1,97 @@
1+-- | Lifted version of "Control.Concurrent.MVar".
2+module Effectful.Concurrent.MVar
23+import System.Mem.Weak (Weak)
24+import Control.Concurrent.MVar (MVar)
25+import qualified Control.Concurrent.MVar as M
27+import Effectful.Concurrent.Internal
28+import Effectful.Internal.Effect
29+import Effectful.Internal.Monad
31+-- | Lifted 'M.newEmptyMVar'.
32+newEmptyMVar :: Concurrent :> es => Eff es (MVar a)
33+newEmptyMVar = unsafeEff_ M.newEmptyMVar
35+-- | Lifted 'M.newMVar'.
36+newMVar :: Concurrent :> es => a -> Eff es (MVar a)
37+newMVar = unsafeEff_ . M.newMVar
39+-- | Lifted 'M.takeMVar'.
40+takeMVar :: Concurrent :> es => MVar a -> Eff es a
41+takeMVar = unsafeEff_ . M.takeMVar
43+-- | Lifted 'M.putMVar'.
44+putMVar :: Concurrent :> es => MVar a -> a -> Eff es ()
45+putMVar var = unsafeEff_ . M.putMVar var
47+-- | Lifted 'M.readMVar'.
48+readMVar :: Concurrent :> es => MVar a -> Eff es a
49+readMVar = unsafeEff_ . M.readMVar
51+-- | Lifted 'M.swapMVar'.
52+swapMVar :: Concurrent :> es => MVar a -> a -> Eff es a
53+swapMVar var = unsafeEff_ . M.swapMVar var
55+-- | Lifted 'M.tryTakeMVar'.
56+tryTakeMVar :: Concurrent :> es => MVar a -> Eff es (Maybe a)
57+tryTakeMVar = unsafeEff_ . M.tryTakeMVar
59+-- | Lifted 'M.tryPutMVar'.
60+tryPutMVar :: Concurrent :> es => MVar a -> a -> Eff es Bool
61+tryPutMVar var = unsafeEff_ . M.tryPutMVar var
63+-- | Lifted 'M.isEmptyMVar'.
64+isEmptyMVar :: Concurrent :> es => MVar a -> Eff es Bool
65+isEmptyMVar = unsafeEff_ . M.isEmptyMVar
67+-- | Lifted 'M.tryReadMVar'.
68+tryReadMVar :: Concurrent :> es => MVar a -> Eff es (Maybe a)
69+tryReadMVar = unsafeEff_ . M.tryReadMVar
71+-- | Lifted 'M.withMVar'.
72+withMVar :: Concurrent :> es => MVar a -> (a -> Eff es b) -> Eff es b
73+withMVar var f = unsafeEff $ \es -> M.withMVar var ((`unEff` es) . f)
75+-- | Lifted 'M.withMVarMasked'.
76+withMVarMasked :: Concurrent :> es => MVar a -> (a -> Eff es b) -> Eff es b
77+withMVarMasked var f = unsafeEff $ \es -> M.withMVarMasked var ((`unEff` es) . f)
79+-- | Lifted 'M.modifyMVar_'.
80+modifyMVar_ :: Concurrent :> es => MVar a -> (a -> Eff es a) -> Eff es ()
81+modifyMVar_ var f = unsafeEff $ \es -> M.modifyMVar_ var ((`unEff` es) . f)
83+-- | Lifted 'M.modifyMVar'.
84+modifyMVar :: Concurrent :> es => MVar a -> (a -> Eff es (a, b)) -> Eff es b
85+modifyMVar var f = unsafeEff $ \es -> M.modifyMVar var ((`unEff` es) . f)
87+-- | Lifted 'M.modifyMVarMasked_'.
88+modifyMVarMasked_ :: Concurrent :> es => MVar a -> (a -> Eff es a) -> Eff es ()
89+modifyMVarMasked_ var f = unsafeEff $ \es -> M.modifyMVarMasked_ var ((`unEff` es) . f)
91+-- | Lifted 'M.modifyMVarMasked'.
92+modifyMVarMasked :: Concurrent :> es => MVar a -> (a -> Eff es (a, b)) -> Eff es b
93+modifyMVarMasked var f = unsafeEff $ \es -> M.modifyMVarMasked var ((`unEff` es) . f)
95+-- | Lifted 'M.mkWeakMVar'.
96+mkWeakMVar :: Concurrent :> es => MVar a -> Eff es () -> Eff es (Weak (MVar a))
97+mkWeakMVar var f = unsafeEff $ \es -> M.mkWeakMVar var ((`unEff` es) f)