anchor.diff:                  acc <- st
                   true
           let dispose() = ()
  -        fromFunctions get next dispose
  +        fromFunctions current next dispose
   
   // [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
   // [<RequireQualifiedAccess>]
  
positive.code:     //             i < len
      //         else false
      //     let dispose() = ()
      //     fromFunctions get next dispose
      //
      // let empty<'T>(): IEnumerator<'T> =
      //     let mutable started = false
      //     let get() = if not started then notStarted() else alreadyFinished()
      //     let next() = started <- true; false
      //     let dispose() = ()
      //     fromFunctions get next dispose
      //
      // let singleton (x: 'T): IEnumerator<'T> =
      //     let mutable index = -1
      //     let get() =
      //         if index < 0 then notStarted()
      //         if index > 0 then alreadyFinished()
      //         x
      //     let next() = index <- index + 1; index = 0
      //     let dispose() = ()
      //     fromFunctions get next dispose
  
      let cast (e: System.Collections.IEnumerator): IEnumerator<'T> =
          let get() = unbox<'T> e.Current
          let next() = e.MoveNext()
          let dispose() =
              match e with
              | :? System.IDisposable as e -> e.Dispose()
              | _ -> ()
          fromFunctions get next dispose
  
      let concat<'T,'U when 'U :> seq<'T>> (sources: seq<'U>) =
          let mutable outerOpt: IEnumerator<'U> option = None
  
negative.code:     mkSeq (fun () -> Enumerator.unfold generator state)
  
  let empty () =
      delay (fun () -> Array.empty :> seq<'T>)
  
  let singleton x =
      delay (fun () -> (Array.singleton x) :> seq<'T>)
  
  let ofArray (arr: 'T[]) =
      arr :> seq<'T>
  