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