anchor.diff:                  str <- str + "; ..."
               str + "]"
   
  -    // // in JS using this object is slower than the object expression below
  -    //
  -    // type FromFunctions<'T>(get, next, reset, dispose) =
  -    //     interface IEnumerator<'T> with
  -    //         member __.Current = get()
  -    //     interface System.Collections.IEnumerator with
  -    //         member __.Current = box (get())
  -    //         member __.MoveNext() = next()
  -    //         member __.Reset() = reset()
  -    //     interface System.IDisposable with
  -    //         member __.Dispose() = dispose()
  -
  -    // let inline fromFunctions get next reset dispose: IEnumerator<'T> =
  -    //     new FromFunctions<_>(get, next, reset, dispose) :> IEnumerator<'T>
  -
  -    let fromFunctions get next reset dispose: IEnumerator<'T> =
  -        { new IEnumerator<'T> with
  -                member __.Current = get()
  -            interface System.Collections.IEnumerator with
  -                member __.Current = box (get())
  -                member __.MoveNext() = next()
  -                member __.Reset() = reset()
  -            interface System.IDisposable with
  -                member __.Dispose() = dispose() }
  +    type FromFunctions<'T>(get, next, dispose) =
  +        interface IEnumerator<'T> with
  +            member __.Current = get()
  +        interface System.Collections.IEnumerator with
  +            member __.Current = box (get())
  +            member __.MoveNext() = next()
  +            member __.Reset() = noReset()
  +        interface System.IDisposable with
  +            member __.Dispose() = dispose()
  +
  +    let inline fromFunctions get next dispose: IEnumerator<'T> =
  +        new FromFunctions<_>(get, next, dispose) :> IEnumerator<'T>
   
       // // implementation for languages where arrays are not IEnumerable
       //
  
positive.code:     //             i <- i + 1
      //             i < len
      //         else false
      //     let reset() = noReset() // i <- -1
      //     let dispose() = ()
      //     fromFunctions get next reset 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 reset() = noReset()
      //     let dispose() = ()
      //     fromFunctions get next reset dispose
      //
      // let singleton (x: 'T): IEnumerator<'T> =
      //     let mutable index = -1
  
negative.code:             match curr with
              | None -> alreadyFinished()
              | Some x -> x
          let dispose() =
              match state with
              | None -> ()
  