anchor.diff:              finally
                   handler ()
   
  -    // 'T * ('T -> M<'U>) -> M<'U> when 'U :> IDisposable
  -    member (*inline*) this.Using (resource : ('T :> System.IDisposable), body : 'T -> Lazy<_>)
  +    // 'T * ('T -> M<'U>) -> M<'U> when 'T :> IDisposable
  +    member (*inline*) this.Using (resource : ('T :> System.IDisposable), binding : 'T -> Lazy<_>)
           : Lazy<'U> =
  -        this.TryFinally (body resource, (fun () ->
  -            if not <| isNull (box resource) then
  -                resource.Dispose ()))
  +        Lazy<'T>.Create <| fun () ->
  +            try
  +                let result = binding resource
  +                result.Force ()
  +            finally
  +                if not <| isNull (box resource) then
  +                    resource.Dispose ()
   
       // (unit -> bool) * M<'T> -> M<'T>
       member this.While (guard, body : Lazy<_>)
  
positive.code:             finally
                  handler ()
  
      // 'T * ('T -> M<'U>) -> M<'U> when 'U :> IDisposable
      member this.Using (resource : ('T :> System.IDisposable), body : _ -> ReaderStateFunc<_,_,_>)
          : ReaderStateFunc<'Env, 'State, 'U> =
          this.TryFinally (body resource, (fun () ->
              if not <| isNull (box resource) then
                  resource.Dispose ()))
  
      // (unit -> bool) * M<'T> -> M<'T>
      member this.While (guard, body : ReaderStateFunc<_,_,_>)
          : ReaderStateFunc<'Env, 'State, unit> =
          if guard () then
              this.Bind (body, (fun () -> this.While (guard, body)))
          else
              this.Zero ()
  
      // seq<'T> * ('T -> M<'U>) -> M<'U>
      // or
  
negative.code:         finally
              handler ()
  
      // 'T * ('T -> M<'U>) -> M<'U> when 'T :> IDisposable
      member __.Using (resource : ('T :> System.IDisposable), body : 'T -> ReaderChoiceFunc<_,_,_>)
          : ReaderChoiceFunc<'Env, 'U, 'Error> =
          fun env ->
          try body resource env
          finally
              if not <| isNull (box resource) then
                  resource.Dispose ()
  