+{-
%
% (c) The GRASP/AQUA Project, Glasgow University, 1995
%
Haskell paper (available from @ftp://ftp.dcs.gla.ac.uk/pub/glasgow-fp/drafts@)
\begin{code}
+-}
module ChannelVar
(
{- abstract -}
newCVar, --:: IO (CVar a)
putCVar, --:: CVar a -> a -> IO ()
getCVar, --:: CVar a -> IO a
- _MVar
+ MVar
) where
-import PreludeGlaST
-import PreludePrimIO ( newEmptyMVar, newMVar, putMVar,
- readMVar, takeMVar, _MVar
- )
+import GHCbase
+{-
\end{code}
@MVars@ provide the basic mechanisms for synchronising access to a shared
a consumer to remove the previous value before it can deposit a new one in the @CVar@.
\begin{code}
+-}
data CVar a
- = CVar (_MVar a) -- prod -> cons
- (_MVar ()) -- cons -> prod
+ = CVar (MVar a) -- prod -> cons
+ (MVar ()) -- cons -> prod
newCVar :: IO (CVar a)
putCVar :: CVar a -> a -> IO ()
= takeMVar datum >>= \ val ->
putMVar ack () >>
return val
-
-\end{code}