anchor.diff:    let get (c: Cell<'a>) : Async<'a> = c.PostAndAsyncReply Get
   
     let run nCells nJobs nUpdates =
  -    printf "Async:    "
  +    printf "Async:     "
       let timer = Stopwatch.StartNew ()
       let cells = Array.zeroCreate nCells
       let before = GC.GetTotalMemory true
  
positive.code:     >>-. c
  
    let run nCells nJobs nUpdates =
      printf "HopacAlt: "
      let timer = Stopwatch.StartNew ()
      let cells = Array.zeroCreate nCells
      let before = GC.GetTotalMemory true
  
negative.code: open Hopac.Extensions
  open System
  open System.Diagnostics
  
  module HopacMVar =
    type Cell<'a> = C of MVar<'a>
  
    let get (C c) = MVar.read c
    let put (C c) x = MVar.mutateFun (fun _ -> x) c
  
    let cell x = C (MVar x)
  
    let run nCells nJobs nUpdates =
      printf "HopacMVar: "
      let timer = Stopwatch.StartNew ()
      let cells = Array.zeroCreate nCells
      let before = GC.GetTotalMemory true
      run <| job {
        for i=0 to nCells-1 do
          cells.[i] <- cell i
        do printf "%4d b/c "
             (max 0L (GC.GetTotalMemory true - before) / int64 nCells)
        return!
          seq {1 .. nJobs}
          |> Seq.map (fun _ ->
             let rnd = Random ()
             Job.forUpTo 1 nUpdates <| fun _ ->
               let c = rnd.Next (0, nCells)
               get cells.[c] >>= fun x ->
               put cells.[c] (x+1))
          |> Job.conIgnore
      }
      let d = timer.Elapsed
      for i=0 to nCells-1 do
        cells.[i] <- Unchecked.defaultof<_>
      printf "%8.5f s to %d c * %d p * %d u\n"
       d.TotalSeconds nCells nJobs nUpdates
  
  module HopacReq =
    type Request<'a> =
  