\begin{code}
module SampleVar
(
- SampleVar, --:: type _ =
+ SampleVar, -- :: type _ =
- newEmptySampleVar, --:: IO (SampleVar a)
- newSampleVar, --:: a -> IO (SampleVar a)
- emptySampleVar, --:: SampleVar a -> IO ()
- readSample, --:: SampleVar a -> IO a
- writeSample --:: SampleVar a -> a -> IO ()
+ newEmptySampleVar, -- :: IO (SampleVar a)
+ newSampleVar, -- :: a -> IO (SampleVar a)
+ emptySampleVar, -- :: SampleVar a -> IO ()
+ readSampleVar, -- :: SampleVar a -> IO a
+ writeSampleVar -- :: SampleVar a -> a -> IO ()
) where
-import ConcBase
+import PrelConc
type SampleVar a
-- filled => make empty and grab sample
-- not filled => try to grab value, empty when read val.
--
-readSample :: SampleVar a -> IO a
-readSample svar = do
+readSampleVar :: SampleVar a -> IO a
+readSampleVar svar = do
(readers,val) <- takeMVar svar
putMVar svar (readers-1,val)
takeMVar val
-- filled => overwrite
-- not filled => fill, write val
--
-writeSample :: SampleVar a -> a -> IO ()
-writeSample svar v = do
+writeSampleVar :: SampleVar a -> a -> IO ()
+writeSampleVar svar v = do
(readers,val) <- takeMVar svar
case readers of
1 ->