anchor.diff:      static member Append  (WrappedListC l, WrappedListC x) = WrappedListC (l @ x)
       static member Empty   = WrappedListC List.empty
       static member Concat  (lst: seq<WrappedListC<_>>)  = Seq.head lst
  +
  +type WrappedListD<'s> = WrappedListD of 's list with
  +    interface Collections.Generic.IEnumerable<'s> with member x.GetEnumerator() = (let (WrappedListD x) = x in x :> _ seq).GetEnumerator()
  +    interface Collections.IEnumerable             with member x.GetEnumerator() = (let (WrappedListD x) = x in x :> _ seq).GetEnumerator() :> Collections.IEnumerator
  +    static member Return  (x) = WrappedListD [x]
  +    static member Bind ((WrappedListD x):WrappedListD<'T>, f) = WrappedListD (List.collect (f >> (fun (WrappedListD x) -> x)) x)
  +
   
   [<TestClass>]
   type Monoid() =
  
positive.code:     let inline (/>) x = flip x
      let inline choice f g = function Choice2Of2 x -> f x | Choice1Of2 y -> g y
      let inline option n f = function None -> n | Some x -> f x
  
  open Combinators
  
  
  
  
  
  type WrappedListA<'s> = WrappedListA of 's list with
  
negative.code: open System
  open Microsoft.VisualStudio.TestTools.UnitTesting
  open FsControl.Operators
  
  type MonadBuilder() =
      member inline b.Return(x)    = result x
      member inline b.Bind(p,rest) = p >>= rest
      member        b.Let (p,rest) = rest p
      member    b.ReturnFrom(expr) = expr
  
  module Combinators =
      let inline flip f x y = f y x
  