anchor.diff:  open System.Threading.Tasks
   
   type Result<'T> = 
  -   | Canceled   
  +   | Canceled of exn
      | Error of exn    
      | Successful of 'T
   
  
positive.code:       if not(guard()) then this.Zero() else
              this.Bind(m(), fun () -> this.While(guard, m))
  
     member this.TryFinally(m, compensation) =
        try this.ReturnFrom m
        finally compensation()
  
negative.code:       let task = t()
        task.Result |> Result.Successful
     with 
     | :? OperationCanceledException as e -> Result.Canceled e
     | :? AggregateException as e ->
        match e.InnerException with
        | :? TaskCanceledException as e -> Result.Canceled e
        | _ -> Result.Error e
     | e -> Result.Error e
  
  