diff options
Diffstat (limited to 'libraries/base/Control/Parallel.hs')
-rw-r--r-- | libraries/base/Control/Parallel.hs | 62 |
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 |