anchor.diff:              with
               | e -> e.Message |> applyMatcher matcher id 
           createMatcher f
  -            (sprintf "throw exception with message %s" matcher.FailureMsgForShould)
  +            (sprintf "throw exception with message %s" matcher.ExpectationMsgForShould)
               
       let withMessageContaining msg =
           withMessage (be.string.containing msg)
  
positive.code: [<AbstractClass>]
  type Matcher<'TActual> () = 
      abstract member ApplyActual<'TResult> : (MatchResult -> 'TResult) -> 'TActual -> 'TResult
      abstract member FailureMsgForShould : string
      abstract member FailureMsgForShouldNot : string
      static member IsMatch (matcher:Matcher<'TActual>) actual =
          let resultToBool = function | MatchSuccess _ -> true | _ -> false
          actual |> matcher.ApplyActual resultToBool
      member self.MessageFor = 
          function
              | Should -> self.FailureMsgForShould
              | ShouldNot -> self.FailureMsgForShouldNot
  
  let applyMatcher<'T,'U> (matcher: Matcher<'T>) f (a : 'T) : 'U =
      matcher.ApplyActual f a
  
negative.code:         match a.ApplyActual id actual with
          | MatchSuccess x -> b.ApplyActual id (x :?> 'b)
          | x -> x
      createMatcher f (sprintf "%s %s" a.ExpectationMsgForShould b.ExpectationMsgForShould)
  