anchor.diff:                          | _       -> ()
                       d
   
  -    static member inline Invoke x (f:_->'R) : 'R =
  -        let inline call_3 (a:^a,b:^b,c:^c,f:^f) = ((^a or ^b or ^c) : (static member Bind: _*_ -> _) b, f)
  -        call_3 (Unchecked.defaultof<Bind>, x, Unchecked.defaultof<'R>, f) :'R
  -
  -    static member inline InvokeOnInstance x (f:_->'R) : 'R =
  -        let inline call_3 (b:^b,c:^c,f:^f) = ((^b or ^c) : (static member Bind: _*_ -> _) b, f)
  -        call_3 (x, Unchecked.defaultof<'R>, f) :'R
  +    static member inline Invoke (source:'``Monad<'T>``) (binder:'T->'``Monad<'U>``) : '``Monad<'U>`` =
  +        let inline call (mthd : 'M, input : 'I, output : 'R, f) = ((^M or ^I or ^R) : (static member Bind: _*_ -> _) input, f)
  +        call (Unchecked.defaultof<Bind>, source, Unchecked.defaultof<'``Monad<'U>``>, binder)
  +
  +    static member inline InvokeOnInstance (source:'``Monad<'T>``) (binder:'T->'``Monad<'U>``) : '``Monad<'U>`` =
  +        ((^``Monad<'T>`` or ^``Monad<'U>``) : (static member Bind: _*_ -> _) source, binder)
   
   
   [<Extension;Sealed>]
  
positive.code:     static member inline FromApplicative f x = Return.Invoke (Apply.Invoke f x)
      static member inline FromMonad       f x = Bind.Invoke x (Return.Invoke << f)
  
      [<Extension>]static member inline Map (x:'f, (f:'a->'b), [<Optional>]impl:Default2) = Return.Invoke (Apply.Invoke f x) :'r
      [<Extension>]static member inline Map (x:'F, (f:'a->'b), [<Optional>]impl:Default1) = ((^F) : (static member Map: ^F * ('a->'b) -> ^R) (x, f))
  
      [<Extension>]static member Map (x:Lazy<_>        , f, [<Optional>]impl:Map) = Lazy.Create (fun () -> f x.Value) : Lazy<'b>
      [<Extension>]static member Map (x:seq<_>         , f, [<Optional>]impl:Map) = Seq.map f x :seq<'b>
  
negative.code:     [<Extension>]static member Map (x:StringBuilder  , f, [<Optional>]impl:Map) = new StringBuilder(String.map f (x.ToString()))
      [<Extension>]static member Map (x:Set<_>         , f, [<Optional>]impl:Map) = Set.map f x
          
  
  
  type MZero =
  