X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Control%2FParallel.hs;fp=Control%2FParallel.hs;h=21c9fed6e44b83356a5d41ee2b4b65958451a08e;hb=36dfc2e2fe3a7cf2e46f571a573d5196349964c4;hp=9aae049147bce2339f74f66d389fdaf32c73cda3;hpb=47b53f7aa91d79eb538e14d4ccbf0ef9f25b7938;p=ghc-base.git diff --git a/Control/Parallel.hs b/Control/Parallel.hs index 9aae049..21c9fed 100644 --- a/Control/Parallel.hs +++ b/Control/Parallel.hs @@ -22,7 +22,7 @@ module Control.Parallel ( import Prelude #ifdef __GLASGOW_HASKELL__ -import GHC.Conc ( par ) +import qualified GHC.Conc ( par ) #endif #if defined(__GRANSIM__) @@ -54,7 +54,27 @@ parAtForNow (I# w) (I# g) (I# s) (I# p) v x y = case (parAtForNow# x v w g s p y #endif -- Maybe parIO and the like could be added here later. -#ifndef __GLASGOW_HASKELL__ + +-- | Indicates that it may be beneficial to evaluate the first +-- argument in parallel with the second. Returns the value of the +-- second argument. +-- +-- @a `par` b@ is exactly equivalent semantically to @b@. +-- +-- @par@ is generally used when the value of @a@ is likely to be +-- required later, but not immediately. Also it is a good idea to +-- ensure that @a@ is not a trivial computation, otherwise the cost of +-- spawning it in parallel overshadows the benefits obtained by +-- running it in parallel. +-- +-- Note that actual parallelism is only supported by certain +-- implementations (GHC with the @-threaded@ option, and GPH, for +-- now). On other implementations, @par a b = b@. +-- +par :: a -> b -> b +#ifdef __GLASGOW_HASKELL__ +par = GHC.Conc.par +#else -- For now, Hugs does not support par properly. par a b = b #endif