anchor.diff:      | Choice1Of2 f, Choice2Of2 e   -> Choice2Of2 e
       | Choice2Of2 e1, Choice2Of2 e2 -> Choice2Of2 (append e1 e2)
   
  -  let inline apm (m: _ Monoid) = apa (fun a b -> m.mappend(a,b))
  +  let inline apm (m: _ Monoid) = apa m.mappend
   
     let inline ap x = apm (ListMonoid<string>()) x
   
  
positive.code:   /// The monoid implementation comes from Matthew Podwysocki's http://codebetter.com/blogs/matthew.podwysocki/archive/2010/02/01/a-kick-in-the-monads-writer-edition.aspx.  
    [<AbstractClass>]
    type Monoid<'a>() =
      abstract member mempty  : unit -> 'a
      abstract member mappend : 'a * 'a -> 'a
      abstract member mconcat : 'a seq -> 'a
      default x.mconcat a = Seq.fold (fun a b -> x.mappend(a,b)) (x.mempty()) a
    
    type MonoidAssociations private() =
      static let associations = new Dictionary<Type, obj>()
  
negative.code:       | false, _    -> failwithf "No IMonoid defined for %O" <| typeof<'a>
    
    let mempty<'a> = MonoidAssociations.Get<'a>().mempty
    let mappend<'a> a b = MonoidAssociations.Get<'a>().mappend a b
  
    type ListMonoid<'a>() =
      inherit Monoid<'a list>()
        override this.mempty = []
        override this.mappend a b = a @ b
    
    MonoidAssociations.Add(new ListMonoid<string>())
    
  