anchor.diff:  let setGroup x =
       subject (fun _ -> x |> extractGroup)
   
  +let createMatcher<'T> (f:'T->bool)=
  +    { new Matcher<'T> () with
  +        member __.ApplyActual g actual = f actual |> g
  +        member __.FailureMsgForShould = "FAIL"
  +        member __.FailureMsgForShouldNot = "FAIL" }
  +
  +let haveChildGroups expected =
  +    createMatcher (fun actual ->
  +        actual |> ExampleGroup.childGroups |> Seq.length = expected)
  +
  +let haveNoOfExampleExamples expected =
  +    createMatcher (fun actual ->
  +        actual
  +        |> ExampleGroup.examples
  +        |> Seq.length = expected)
  +
  +let haveExampleName expected =
  +    (fun actual -> actual |> Example.name = expected)
  +    |> createMatcher
  +
  +let haveGroupName expected =
  +    (fun a -> a |> ExampleGroup.name = expected)
  +    |> createMatcher
  +
   let itBehavesLikeAGroupWithChildGroup name =
       MultipleOperations [
           it "should have exactly one child group" <| fun c ->
               c |> getSubject
  -            |> ExampleGroup.childGroups
  -            |> List.length |> should equal 1
  +            |> should (haveChildGroups 1)
           
           it "should have a group with the right name" <| fun c ->
               c |> getSubject
               |> ExampleGroup.childGroups
  -            |> List.map ExampleGroup.name
  -            |> should have.element (toBe equal name)
  +            |> should (have.atLeastOneElement (haveGroupName name))
       ]
   
   let specs =
  
positive.code: 
                  it "should store the meta data on the example group" <| fun c ->
                      let grp = c |> getSubject<ExampleGroup.T>
                      grp.MetaData?answer |> should equal 42
              ]
  
              context "example has meta data applied" [
  
negative.code: ﻿module FSpec.SelfTests.DslV2Specs
  open FSpec.Core
  open Dsl
  open MatchersV3
  open MetaData
  open TestContextOperations
  
  