summaryrefslogtreecommitdiff
path: root/libraries/base/Control/Parallel.hs
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/base/Control/Parallel.hs')
-rw-r--r--libraries/base/Control/Parallel.hs62
1 files changed, 62 insertions, 0 deletions
diff --git a/libraries/base/Control/Parallel.hs b/libraries/base/Control/Parallel.hs
new file mode 100644
index 0000000000..1d6a126f1e
--- /dev/null
+++ b/libraries/base/Control/Parallel.hs
@@ -0,0 +1,62 @@
+-----------------------------------------------------------------------------
+--
+-- Module : Control.Parallel
+-- Copyright : (c) The University of Glasgow 2001
+-- License : BSD-style (see the file libraries/core/LICENSE)
+--
+-- Maintainer : libraries@haskell.org
+-- Stability : experimental
+-- Portability : non-portable
+--
+-- $Id: Parallel.hs,v 1.1 2001/06/28 14:15:01 simonmar Exp $
+--
+-- Parallel Constructs
+--
+-----------------------------------------------------------------------------
+
+module Control.Parallel (
+ par, seq -- re-exported
+#if defined(__GRANSIM__)
+ , parGlobal, parLocal, parAt, parAtAbs, parAtRel, parAtForNow
+#endif
+ ) where
+
+import Prelude
+
+#ifdef __GLASGOW_HASKELL__
+import GHC.Conc ( par )
+#endif
+
+#if defined(__GRANSIM__)
+import PrelBase
+import PrelErr ( parError )
+import PrelGHC ( parGlobal#, parLocal#, parAt#, parAtAbs#, parAtRel#, parAtForNow# )
+
+{-# INLINE parGlobal #-}
+{-# INLINE parLocal #-}
+{-# INLINE parAt #-}
+{-# INLINE parAtAbs #-}
+{-# INLINE parAtRel #-}
+{-# INLINE parAtForNow #-}
+parGlobal :: Int -> Int -> Int -> Int -> a -> b -> b
+parLocal :: Int -> Int -> Int -> Int -> a -> b -> b
+parAt :: Int -> Int -> Int -> Int -> a -> b -> c -> c
+parAtAbs :: Int -> Int -> Int -> Int -> Int -> a -> b -> b
+parAtRel :: Int -> Int -> Int -> Int -> Int -> a -> b -> b
+parAtForNow :: Int -> Int -> Int -> Int -> a -> b -> c -> c
+
+parGlobal (I# w) (I# g) (I# s) (I# p) x y = case (parGlobal# x w g s p y) of { 0# -> parError; _ -> y }
+parLocal (I# w) (I# g) (I# s) (I# p) x y = case (parLocal# x w g s p y) of { 0# -> parError; _ -> y }
+
+parAt (I# w) (I# g) (I# s) (I# p) v x y = case (parAt# x v w g s p y) of { 0# -> parError; _ -> y }
+parAtAbs (I# w) (I# g) (I# s) (I# p) (I# q) x y = case (parAtAbs# x q w g s p y) of { 0# -> parError; _ -> y }
+parAtRel (I# w) (I# g) (I# s) (I# p) (I# q) x y = case (parAtRel# x q w g s p y) of { 0# -> parError; _ -> y }
+parAtForNow (I# w) (I# g) (I# s) (I# p) v x y = case (parAtForNow# x v w g s p y) of { 0# -> parError; _ -> y }
+
+#endif
+
+-- Maybe parIO and the like could be added here later.
+#ifndef __GLASGOW_HASKELL__
+-- For now, Hugs does not support par properly.
+par a b = b
+#endif