b12785f4d34400f254b6352ba327681e4aa1b4af
[ghc-base.git] / GHC / Conc.lhs
1 \begin{code}
2 {-# OPTIONS_GHC -XNoImplicitPrelude #-}
3 {-# OPTIONS_GHC -fno-warn-missing-signatures #-}
4 {-# OPTIONS_HADDOCK not-home #-}
5 -----------------------------------------------------------------------------
6 -- |
7 -- Module      :  GHC.Conc
8 -- Copyright   :  (c) The University of Glasgow, 1994-2002
9 -- License     :  see libraries/base/LICENSE
10 -- 
11 -- Maintainer  :  cvs-ghc@haskell.org
12 -- Stability   :  internal
13 -- Portability :  non-portable (GHC extensions)
14 --
15 -- Basic concurrency stuff.
16 -- 
17 -----------------------------------------------------------------------------
18
19 -- No: #hide, because bits of this module are exposed by the stm package.
20 -- However, we don't want this module to be the home location for the
21 -- bits it exports, we'd rather have Control.Concurrent and the other
22 -- higher level modules be the home.  Hence:
23
24 #include "Typeable.h"
25
26 -- #not-home
27 module GHC.Conc
28         ( ThreadId(..)
29
30         -- * Forking and suchlike
31         , forkIO        -- :: IO a -> IO ThreadId
32         , forkIOUnmasked
33         , forkOnIO      -- :: Int -> IO a -> IO ThreadId
34         , forkOnIOUnmasked
35         , numCapabilities -- :: Int
36         , numSparks       -- :: IO Int
37         , childHandler  -- :: Exception -> IO ()
38         , myThreadId    -- :: IO ThreadId
39         , killThread    -- :: ThreadId -> IO ()
40         , throwTo       -- :: ThreadId -> Exception -> IO ()
41         , par           -- :: a -> b -> b
42         , pseq          -- :: a -> b -> b
43         , runSparks
44         , yield         -- :: IO ()
45         , labelThread   -- :: ThreadId -> String -> IO ()
46
47         , ThreadStatus(..), BlockReason(..)
48         , threadStatus  -- :: ThreadId -> IO ThreadStatus
49
50         -- * Waiting
51         , threadDelay           -- :: Int -> IO ()
52         , registerDelay         -- :: Int -> IO (TVar Bool)
53         , threadWaitRead        -- :: Int -> IO ()
54         , threadWaitWrite       -- :: Int -> IO ()
55         , closeFdWith           -- :: (Fd -> IO ()) -> Fd -> IO ()
56
57         -- * TVars
58         , STM(..)
59         , atomically    -- :: STM a -> IO a
60         , retry         -- :: STM a
61         , orElse        -- :: STM a -> STM a -> STM a
62         , throwSTM      -- :: Exception e => e -> STM a
63         , catchSTM      -- :: Exception e => STM a -> (e -> STM a) -> STM a
64         , alwaysSucceeds -- :: STM a -> STM ()
65         , always        -- :: STM Bool -> STM ()
66         , TVar(..)
67         , newTVar       -- :: a -> STM (TVar a)
68         , newTVarIO     -- :: a -> STM (TVar a)
69         , readTVar      -- :: TVar a -> STM a
70         , readTVarIO    -- :: TVar a -> IO a
71         , writeTVar     -- :: a -> TVar a -> STM ()
72         , unsafeIOToSTM -- :: IO a -> STM a
73
74         -- * Miscellaneous
75         , withMVar
76 #ifdef mingw32_HOST_OS
77         , asyncRead     -- :: Int -> Int -> Int -> Ptr a -> IO (Int, Int)
78         , asyncWrite    -- :: Int -> Int -> Int -> Ptr a -> IO (Int, Int)
79         , asyncDoProc   -- :: FunPtr (Ptr a -> IO Int) -> Ptr a -> IO Int
80
81         , asyncReadBA   -- :: Int -> Int -> Int -> Int -> MutableByteArray# RealWorld -> IO (Int, Int)
82         , asyncWriteBA  -- :: Int -> Int -> Int -> Int -> MutableByteArray# RealWorld -> IO (Int, Int)
83 #endif
84
85 #ifndef mingw32_HOST_OS
86         , Signal, HandlerFun, setHandler, runHandlers
87 #endif
88
89         , ensureIOManagerIsRunning
90
91 #ifdef mingw32_HOST_OS
92         , ConsoleEvent(..)
93         , win32ConsoleHandler
94         , toWin32ConsoleEvent
95 #endif
96         , setUncaughtExceptionHandler      -- :: (Exception -> IO ()) -> IO ()
97         , getUncaughtExceptionHandler      -- :: IO (Exception -> IO ())
98
99         , reportError, reportStackOverflow
100         ) where
101
102 import GHC.Conc.IO
103 import GHC.Conc.Sync
104
105 #ifndef mingw32_HOST_OS
106 import GHC.Conc.Signal
107 #endif
108
109 \end{code}