packages feed

eprocess 1.1.2 → 1.5.0

raw patch · 2 files changed

+26/−4 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Control.Concurrent.Process: instance (Monad m) => Monad (ReceiverT r m)
- Control.Concurrent.Process: instance (MonadCatchIO m) => MonadCatchIO (ReceiverT r m)
- Control.Concurrent.Process: instance (MonadError e m) => MonadError e (ReceiverT r m)
- Control.Concurrent.Process: instance (MonadIO m) => MonadIO (ReceiverT r m)
- Control.Concurrent.Process: instance (MonadReader r m) => MonadReader r (ReceiverT r m)
- Control.Concurrent.Process: instance (MonadState s m) => MonadState s (ReceiverT r m)
+ Control.Concurrent.Process: instance Monad m => Monad (ReceiverT r m)
+ Control.Concurrent.Process: instance MonadCatchIO m => MonadCatchIO (ReceiverT r m)
+ Control.Concurrent.Process: instance MonadError e m => MonadError e (ReceiverT r m)
+ Control.Concurrent.Process: instance MonadIO m => MonadIO (ReceiverT r m)
+ Control.Concurrent.Process: instance MonadReader r m => MonadReader r (ReceiverT r m)
+ Control.Concurrent.Process: instance MonadState s m => MonadState s (ReceiverT r m)
+ Control.Concurrent.Process: recvIn :: MonadIO m => Int -> ReceiverT r m (Maybe r)
- Control.Concurrent.Process: kill :: (MonadIO m) => Handle a -> m ()
+ Control.Concurrent.Process: kill :: MonadIO m => Handle a -> m ()
- Control.Concurrent.Process: recv :: (MonadIO m) => ReceiverT r m r
+ Control.Concurrent.Process: recv :: MonadIO m => ReceiverT r m r
- Control.Concurrent.Process: runHere :: (MonadIO m) => Process r t -> m t
+ Control.Concurrent.Process: runHere :: MonadIO m => Process r t -> m t
- Control.Concurrent.Process: self :: (Monad m) => ReceiverT r m (Handle r)
+ Control.Concurrent.Process: self :: Monad m => ReceiverT r m (Handle r)
- Control.Concurrent.Process: sendRecv :: (MonadIO m) => Handle a -> a -> ReceiverT r m r
+ Control.Concurrent.Process: sendRecv :: MonadIO m => Handle a -> a -> ReceiverT r m r
- Control.Concurrent.Process: sendTo :: (MonadIO m) => Handle a -> a -> m ()
+ Control.Concurrent.Process: sendTo :: MonadIO m => Handle a -> a -> m ()
- Control.Concurrent.Process: spawn :: (MonadIO m) => Process r k -> m (Handle r)
+ Control.Concurrent.Process: spawn :: MonadIO m => Process r k -> m (Handle r)

Files

eprocess.cabal view
@@ -1,5 +1,5 @@ name: eprocess-version: 1.1.2+version: 1.5.0 cabal-version: >=1.6 build-type: Simple license: BSD3
src/Control/Concurrent/Process.hs view
@@ -12,7 +12,7 @@ -- ** Process creation / destruction         makeProcess, runHere, spawn, kill, -- ** Message passing-        self, sendTo, recv, sendRecv+        self, sendTo, recv, recvIn, sendRecv     ) where  import Control.Monad.Reader@@ -22,7 +22,6 @@ import Control.Monad.CatchIO import Data.Monoid import Control.Concurrent-import Control.Concurrent.Chan  -- | A Process handle.  It's returned on process creation and should be used -- | afterwards to send messages to it@@ -66,6 +65,29 @@ recv :: MonadIO m => ReceiverT r m r recv = RT $ ask >>= liftIO . readChan . chan +-- | Just like /recv/ but with a timeout parameter. Usage:+-- @+--      maybeMessage <- recv+-- @+recvIn :: MonadIO m => Int    -- ^ milliseconds to wait until timeout+        -> ReceiverT r m (Maybe r)+recvIn ms = RT $+    do+            ch <- ask >>= return . chan+            liftIO $ do+                        tmp <- newEmptyMVar+                        timer <- if ms > 0+                                    then forkIO $ do+                                                    let its = [1..10] :: [Int]+                                                    forM_ its $ \_ -> threadDelay $ ms * 100+                                                    putMVar tmp Nothing+                                    else forkIO $ putMVar tmp Nothing+                        runner <- forkIO $ readChan ch >>= putMVar tmp . Just+                        res <- takeMVar tmp+                        killThread timer+                        killThread runner+                        return res+ -- | /sendRecv/ is just a syntactic sugar for: -- @ --      sendTo h a >> recv@@ -85,7 +107,7 @@                  pChan <- newChan                  pThread <- forkIO $ do                                          t <- myThreadId-                                         runReaderT (internalReader p) $ PH pChan t+                                         _ <- runReaderT (internalReader p) $ PH pChan t                                          return ()                  return $ PH pChan pThread