Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 1f2b142b9d2ef4849a6f5316fa1c5b12 > files > 2705

ghc-6.10.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>Control.Parallel</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_Control-Parallel.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>parallel-1.1.0.1: parallel programming library</TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>Control.Parallel</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>non-portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>libraries@haskell.org</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
>Parallel Constructs
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3Apar"
>par</A
> ::  a -&gt; b -&gt; b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Apseq"
>pseq</A
> ::  a -&gt; b -&gt; b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Documentation</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:par"
><A NAME="v%3Apar"
></A
></A
><B
>par</B
> ::  a -&gt; b -&gt; b</TD
></TR
><TR
><TD CLASS="doc"
><P
>Indicates that it may be beneficial to evaluate the first
 argument in parallel with the second.  Returns the value of the
 second argument.
</P
><P
><TT
>a <TT
><A HREF="Control-Parallel.html#v%3Apar"
>par</A
></TT
> b</TT
> is exactly equivalent semantically to <TT
>b</TT
>.
</P
><P
><TT
>par</TT
> is generally used when the value of <TT
>a</TT
> is likely to be
 required later, but not immediately.  Also it is a good idea to
 ensure that <TT
>a</TT
> is not a trivial computation, otherwise the cost of
 spawning it in parallel overshadows the benefits obtained by
 running it in parallel.
</P
><P
>Note that actual parallelism is only supported by certain
 implementations (GHC with the <TT
>-threaded</TT
> option, and GPH, for
 now).  On other implementations, <TT
>par a b = b</TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:pseq"
><A NAME="v%3Apseq"
></A
></A
><B
>pseq</B
> ::  a -&gt; b -&gt; b</TD
></TR
><TR
><TD CLASS="doc"
><P
>Semantically identical to <TT
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TT
>, but with a subtle operational
 difference: <TT
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TT
> is strict in both its arguments, so the compiler
 may, for example, rearrange <TT
>a <TT
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TT
> b</TT
> into <TT
>b <TT
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TT
> a <TT
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TT
> b</TT
>.
 This is normally no problem when using <TT
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TT
> to express strictness,
 but it can be a problem when annotating code for parallelism,
 because we need more control over the order of evaluation; we may
 want to evaluate <TT
>a</TT
> before <TT
>b</TT
>, because we know that <TT
>b</TT
> has
 already been sparked in parallel with <TT
><A HREF="Control-Parallel.html#v%3Apar"
>par</A
></TT
>.
</P
><P
>This is why we have <TT
><A HREF="Control-Parallel.html#v%3Apseq"
>pseq</A
></TT
>.  In contrast to <TT
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TT
>, <TT
><A HREF="Control-Parallel.html#v%3Apseq"
>pseq</A
></TT
> is only
 strict in its first argument (as far as the compiler is concerned),
 which restricts the transformations that the compiler can do, and
 ensures that the user can retain control of the evaluation order.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../ghc-prim/GHC-Prim.html#v%3Aseq"
>seq</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.4.2</TD
></TR
></TABLE
></BODY
></HTML
>