anchor.diff:  //Real: 00:00:00.212, CPU: 00:00:00.202, GC gen0: 22, gen1: 1, gen2: 0 (50.82 faster)
   //Real: 00:00:00.377, CPU: 00:00:00.374, GC gen0: 29, gen1: 0, gen2: 0 (38.77 faster)
   //Real: 00:00:02.095, CPU: 00:00:02.090, GC gen0: 147, gen1: 0, gen2: 0 (12.98 faster)
  +
  +let inline raise (e: System.Exception) = (# "throw" e : 'U #)
   
   ///Strip possibly nested target invocation exception
   let rec stripTargetInvocationException (e:exn) =
  
positive.code:     | _ -> Some(e) //the real user code exception
  
  ///"reraise" the given exception, preserving the stacktrace (e.g. for InnerExceptions of TargetInvocation exceptions)
  let reraisePreserveStackTrace (e:Exception) =
      //http://iridescence.no/post/Preserving-Stack-Traces-When-Re-Throwing-Inner-Exceptions.aspx
      let remoteStackTraceString = typeof<exn>.GetField("_remoteStackTraceString", BindingFlags.Instance ||| BindingFlags.NonPublic);
      remoteStackTraceString.SetValue(e, e.StackTrace + Environment.NewLine);
  
negative.code: open System.Reflection
  open Microsoft.FSharp.Reflection
  open System
  
  module P = Patterns
  module DP = DerivedPatterns
  
  