anchor.diff:  
               let next = 
                   let enumerator = source.GetEnumerator()
  -                let flag = ref true
  +                let valueReady = ref true
                   fun () -> 
  -                    if not !flag || not <| enumerator.MoveNext()  then
  +                    if not !valueReady || not <| enumerator.MoveNext()  then
                           enumerator.Dispose()
                           false
                       else
  -                        flag := iterf enumerator.Current
  +                        valueReady := iterf enumerator.Current
                           true
               (bulk, next)
           Stream iter
  
positive.code:     /// <returns>The result stream.</returns>
      let zipWith (f : 'T -> 'S -> 'R) (first : Stream<'T>) (second : Stream<'S>) : Stream<'R> =
          let firstCurrent = ref Unchecked.defaultof<'T>
          let firstFlag = ref false
          let (Stream firstf) = first
          let (_, firstNext) = firstf (fun v -> firstCurrent := v; firstFlag := true; true)
          let secondCurrent = ref Unchecked.defaultof<'S>
          let secondFlag = ref false
          let (Stream secondf) = second
          let (_, secondNext) = secondf (fun v -> secondCurrent := v; secondFlag := true; true)
          let iter iterf =
              let bulk () =
                  let mutable next = true
                  while next do
                      while firstNext () && not !firstFlag do ()
                      while secondNext () && not !secondFlag do ()
  
                      if !firstFlag && !secondFlag then
                          firstFlag := false
                          secondFlag := false
                          next <- iterf (f !firstCurrent !secondCurrent)
                      else
                          next <- false
                      ()
              let next = 
                  let flag = ref true
                  (fun () ->
                      if not !flag then
                          false
                      else
                          while firstNext () && not !firstFlag do ()
                          while secondNext () && not !secondFlag do ()
                          if !firstFlag && !secondFlag then
                              firstFlag := false
                              secondFlag := false
                              flag := iterf (f !firstCurrent !secondCurrent)
                              true
                          else
                              false)
  
negative.code:                 | _ -> ()
              let next = 
                  let enumerator = source.GetEnumerator()
                  let valueReady = ref true
                  fun () -> 
                      if not !valueReady || not <| enumerator.MoveNext()  then
                          match enumerator with 
                          | :? System.IDisposable as disposable -> disposable.Dispose()
                          | _ -> ()
                          false
                      else
                          valueReady := iterf (enumerator.Current :?> 'T)
                          true
              (bulk, next)
          Stream iter
  