anchor.diff:                              let! input = Arb.generate<simmap<'k, 'v>>
                               let! f = Arb.generate<'k -> 'v -> simmod<Option<'v>>>
                               return SimMap.chooseM f input
  +
  +                        | 9 ->
  +                            let! l = Arb.generate<simmap<'k, 'v>>
  +                            let! r = Arb.generate<simmap<'k, 'v>>
  +                            let! f = Arb.generate<'k -> 'v -> 'v -> 'v>
  +                            return SimMap.unionWith f l r 
  +
  +                        | 10 ->
  +                            let! l = Arb.generate<simmap<'k, 'v>>
  +                            let! r = Arb.generate<simmap<'k, 'v>>
  +                            let! f = Arb.generate<'k -> Option<'v> -> Option<'v> -> Option<'v>>
  +                            return SimMap.choose2 f l r 
  +                            
                           | _ ->
                               return failwith ""
                               
  
positive.code:                 HMap.choose (fun k v -> f.Invoke(k,v).Value) m.Content
          }
  
  
      let private equal (l : hmap<'k, 'v>) (r : hmap<'k, 'v>) =
          let mutable l = l
  
negative.code:     | Filter of obj * SimMapTree
      | MapM of obj * SimMapTree
      | ChooseM of obj * SimMapTree
      | UnionWith of obj * SimMapTree * SimMapTree
      | Choose2 of obj * SimMapTree * SimMapTree
  
  and simmap<'k, 'v> =
      inherit IDependent
  