anchor.diff:    inherit ResultNode
     abstract TestCase: TestCase
     abstract IsError: bool
  +  abstract FailureMessages: string[]
  +  abstract SkipMessages: string[]
     abstract Exceptions: exn[]
     abstract Duration: TimeSpan
     abstract AssertionResults: AssertionResult[]
  
positive.code:         match this with
          | Error _ -> true
          | Done _ -> false
        member this.Exceptions = this.Exceptions
        member this.Duration = this.Duration
        member this.AssertionResults = this.AssertionResults
  
negative.code:       match this with
        | Error (testCase, _, _, _) -> testCase
        | Done (testCase, _, _) -> testCase
      member this.FailureMessages =
        match this with
        | Done (_, rs, _) ->
          rs
          |> NonEmptyList.toSeq
          |> AssertionResult.Seq.onlyNotPassed
        | Error (_, _, ps, _) -> Seq.ofList ps
        |> Seq.choose (function
        | Violated msg -> Some msg
        | Skipped _ -> None
        )
        |> Seq.toArray
      member this.SkipMessages =
        match this with
        | Done (_, rs, _) ->
          rs
          |> NonEmptyList.toSeq
          |> AssertionResult.Seq.onlyNotPassed
        | Error (_, _, ps, _) -> Seq.ofList ps
        |> Seq.choose (function
        | Violated _ -> None
        | Skipped msg -> Some msg
        )
        |> Seq.toArray
      member this.Exceptions =
        match this with
        | Error (_, exns, _, _) -> exns |> Seq.toArray
  