Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 70ec89744a04da80369b4702b2c37256 > files > 1693

ghc-doc-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.Concurrent.STM.TMVar</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-Concurrent-STM-TMVar.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"
>stm-2.1.1.2: Software Transactional Memory</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.Concurrent.STM.TMVar</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>non-portable (requires STM)</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
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>TMVars
</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
>TMVar: Transactional MVars, for use in the STM monad
 (GHC only)
</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"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ATMVar"
>TMVar</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewTMVar"
>newTMVar</A
> ::  a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewEmptyTMVar"
>newEmptyTMVar</A
> ::  <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewTMVarIO"
>newTMVarIO</A
> ::  a -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewEmptyTMVarIO"
>newEmptyTMVarIO</A
> ::  <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtakeTMVar"
>takeTMVar</A
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AputTMVar"
>putTMVar</A
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AreadTMVar"
>readTMVar</A
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AswapTMVar"
>swapTMVar</A
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtryTakeTMVar"
>tryTakeTMVar</A
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> (<A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtryPutTMVar"
>tryPutTMVar</A
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AisEmptyTMVar"
>isEmptyTMVar</A
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
><A NAME="1"
>TMVars
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:TMVar"
><A NAME="t%3ATMVar"
></A
></A
><B
>TMVar</B
> a </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>A <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> is a synchronising variable, used
for communication between concurrent threads.  It can be thought of
as a box, which may be empty or full.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:newTMVar"
><A NAME="v%3AnewTMVar"
></A
></A
><B
>newTMVar</B
> ::  a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="doc"
>Create a <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> which contains the supplied value.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:newEmptyTMVar"
><A NAME="v%3AnewEmptyTMVar"
></A
></A
><B
>newEmptyTMVar</B
> ::  <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="doc"
>Create a <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> which is initially empty.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:newTMVarIO"
><A NAME="v%3AnewTMVarIO"
></A
></A
><B
>newTMVarIO</B
> ::  a -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="doc"
><TT
>IO</TT
> version of <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AnewTMVar"
>newTMVar</A
></TT
>.  This is useful for creating top-level
 <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
>s using System.IO.Unsafe.unsafePerformIO, because using
 <TT
><A HREF="../base/GHC-Conc.html#v%3Aatomically"
>atomically</A
></TT
> inside System.IO.Unsafe.unsafePerformIO isn't
 possible.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:newEmptyTMVarIO"
><A NAME="v%3AnewEmptyTMVarIO"
></A
></A
><B
>newEmptyTMVarIO</B
> ::  <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a)</TD
></TR
><TR
><TD CLASS="doc"
><TT
>IO</TT
> version of <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AnewEmptyTMVar"
>newEmptyTMVar</A
></TT
>.  This is useful for creating top-level
 <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
>s using System.IO.Unsafe.unsafePerformIO, because using
 <TT
><A HREF="../base/GHC-Conc.html#v%3Aatomically"
>atomically</A
></TT
> inside System.IO.Unsafe.unsafePerformIO isn't
 possible.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:takeTMVar"
><A NAME="v%3AtakeTMVar"
></A
></A
><B
>takeTMVar</B
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> a</TD
></TR
><TR
><TD CLASS="doc"
>Return the contents of the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
>.  If the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> is currently
 empty, the transaction will <TT
><A HREF="../base/GHC-Conc.html#v%3Aretry"
>retry</A
></TT
>.  After a <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AtakeTMVar"
>takeTMVar</A
></TT
>, 
 the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> is left empty.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:putTMVar"
><A NAME="v%3AputTMVar"
></A
></A
><B
>putTMVar</B
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="doc"
>Put a value into a <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
>.  If the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> is currently full,
 <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AputTMVar"
>putTMVar</A
></TT
> will <TT
><A HREF="../base/GHC-Conc.html#v%3Aretry"
>retry</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:readTMVar"
><A NAME="v%3AreadTMVar"
></A
></A
><B
>readTMVar</B
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> a</TD
></TR
><TR
><TD CLASS="doc"
>This is a combination of <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AtakeTMVar"
>takeTMVar</A
></TT
> and <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AputTMVar"
>putTMVar</A
></TT
>; ie. it takes the value
  from the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
>, puts it back, and also returns it.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:swapTMVar"
><A NAME="v%3AswapTMVar"
></A
></A
><B
>swapTMVar</B
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> a</TD
></TR
><TR
><TD CLASS="doc"
>Swap the contents of a <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> for a new value.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tryTakeTMVar"
><A NAME="v%3AtryTakeTMVar"
></A
></A
><B
>tryTakeTMVar</B
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> (<A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> a)</TD
></TR
><TR
><TD CLASS="doc"
>A version of <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AtakeTMVar"
>takeTMVar</A
></TT
> that does not <TT
><A HREF="../base/GHC-Conc.html#v%3Aretry"
>retry</A
></TT
>.  The <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AtryTakeTMVar"
>tryTakeTMVar</A
></TT
>
 function returns <TT
><A HREF="../base/Data-Maybe.html#v%3ANothing"
>Nothing</A
></TT
> if the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> was empty, or <TT
><TT
><A HREF="../base/Data-Maybe.html#v%3AJust"
>Just</A
></TT
> a</TT
> if
 the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> was full with contents <TT
>a</TT
>.  After <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AtryTakeTMVar"
>tryTakeTMVar</A
></TT
>, the
 <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> is left empty.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tryPutTMVar"
><A NAME="v%3AtryPutTMVar"
></A
></A
><B
>tryPutTMVar</B
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
>A version of <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AputTMVar"
>putTMVar</A
></TT
> that does not <TT
><A HREF="../base/GHC-Conc.html#v%3Aretry"
>retry</A
></TT
>.  The <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AtryPutTMVar"
>tryPutTMVar</A
></TT
>
 function attempts to put the value <TT
>a</TT
> into the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
>, returning
 <TT
><A HREF="../ghc-prim/GHC-Bool.html#v%3ATrue"
>True</A
></TT
> if it was successful, or <TT
><A HREF="../ghc-prim/GHC-Bool.html#v%3AFalse"
>False</A
></TT
> otherwise.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isEmptyTMVar"
><A NAME="v%3AisEmptyTMVar"
></A
></A
><B
>isEmptyTMVar</B
> ::  <A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
> a -&gt; <A HREF="../base/GHC-Conc.html#t%3ASTM"
>STM</A
> <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Check whether a given <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> is empty.
</P
><P
>Notice that the boolean value returned  is just a snapshot of
 the state of the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
>. By the time you get to react on its result,
 the <TT
><A HREF="Control-Concurrent-STM-TMVar.html#t%3ATMVar"
>TMVar</A
></TT
> may have been filled (or emptied) - so be extremely
 careful when using this operation.   Use <TT
><A HREF="Control-Concurrent-STM-TMVar.html#v%3AtryTakeTMVar"
>tryTakeTMVar</A
></TT
> instead if possible.
</P
></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
>