anchor.diff:  type TestData = { NumberOfTests: int; Stamps: seq<int * list<string>>}
   type TestResult = 
       | True of TestData
  -    | False of TestData * list<obj> //the arguments that produced the failed test
  +    | False of TestData * list<obj> * option<Exception> //the arguments that produced the failed test
       | Exhausted of TestData
  +
  +type TestStep = 
  +    | Generated of list<obj>    //test number and generated arguments (test not yet executed)
  +    | Passed of list<string>    //passed, test number and stamps for this test
  +    | Falsified of list<obj> * option<Exception>   //falsified the property with given arguments, potentially exception was thrown
  +    | Failed                    //generated arguments did not pass precondition
  +
  +
   type IRunner =
       abstract member OnArguments: int * list<obj> * (int -> list<obj> -> string) -> unit
       abstract member OnFinished: string * TestResult -> unit
  
positive.code: open Random
  open Microsoft.FSharp.Control
  open Microsoft.FSharp.Reflection
   
  type internal IGen = 
      abstract AsGenObject : Gen<obj>
  
negative.code:                     |> Array.to_list
                      |> sequence
                      |> (fun gen -> gen.Map List.to_array)
          let property args =
              if m.ReturnType = typeof<bool> then
                  invokeMethod m args |> unbox<bool> |> propl
              elif m.ReturnType = typeof<Property> then
                  invokeMethod m args |> unbox<Property>
              else
                  failwith "Invalid return type: must be either bool or Property"
          check {config with name = t.Name+"."+m.Name} (forAll gen property)) |> ignore