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