Advertisement
Guest User

Untitled

a guest
Aug 21st, 2013
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {-# LANGUAGE DefaultSignatures, MultiParamTypeClasses #-}
  2. module Control.Concurrent.ForkableT where
  3.  
  4. import Control.Concurrent
  5. import Control.Monad.Reader
  6. import Control.Monad.Trans.Control
  7.  
  8. -- ForkableT
  9. class ForkableT t where
  10.     forkT :: (Forkable m n) => t n () -> t m ThreadId
  11.     default forkT :: (MonadTransControl t, Forkable m n) => t n () -> t m ThreadId
  12.     forkT t = liftWith $ \run -> fork $ run t >> return ()
  13.  
  14. -- Forkable
  15. class (MonadIO m, MonadIO n) => Forkable m n where
  16.     fork :: n () -> m ThreadId
  17.     default fork :: ForkableT t => t n () -> t m ThreadId
  18.     fork = forkT
  19.  
  20. instance Forkable IO IO where
  21.     fork = forkIO
  22.  
  23. instance ForkableT (ReaderT r)
  24. instance (Forkable m n) => Forkable (ReaderT r m) (ReaderT r n)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement