anchor.diff:  open Microsoft.FSharp.Reflection
   
   let P = Sql.Parameter.make
  +let failwithe (e: #exn) msg = raise <| Exception(msg, e)
  +let failwithef (e: #exn) = Printf.kprintf (failwithe e)
   
   [<Test>]
   let catchtest() =
  
positive.code:     let someTran = Tx.transactional2 someTranAndFail
      let result = someTran conn
      match result with
      | Tx.Commit v -> raise <| Exception("transaction should have failed!")
      | Tx.Rollback v -> raise <| Exception("transaction should have failed!")
      | Tx.Failed e -> printfn "Failed with exception %A" e
      Assert.AreEqual(0L, countUsers conn)
  
  
negative.code:     match result with
      | Tx.Commit a -> Assert.AreEqual(50L, countUsers c)
      | Tx.Rollback a -> failwith "Transaction should not have failed"
      | Tx.Failed e -> failwithe e "Transaction should not have failed"
  
  [<Test;Parallelizable>]
  let ``tx monad for with error`` () =
  