anchor.diff:  
       type Apply() =
           inherit ApplyDefault()
  +        static member        instance (_:Apply, f:seq<_>      , x:seq<'a>      , _:seq<'b>      ) = fun () -> DefaultImpl.ApplyFromMonad f x :seq<'b>
           static member        instance (_:Apply, f:List<_>     , x:List<'a>     , _:List<'b>     ) = fun () -> DefaultImpl.ApplyFromMonad f x :List<'b>
           static member        instance (_:Apply, f:_ []        , x:'a []        , _:'b []        ) = fun () -> DefaultImpl.ApplyFromMonad f x :'b []
           static member        instance (_:Apply, f:'r -> _     , g: _ -> 'a     , _: 'r -> 'b    ) = fun () -> fun x -> f x (g x) :'b
  
positive.code:     type MapDefault() =
          static member inline instance (_:MapDefault, x:'f when 'f :> obj, _:'r when 'r :> obj) = fun (f:'a->'b) -> pure' f <*> x :'r
  
      type Map() =
          inherit MapDefault()
          static member instance (_:Map, x:option<_>    , _) = fun f -> Option.map  f x
          static member instance (_:Map, x:List<_>      , _:List<'b>) = fun f -> List.map f x :List<'b>
          static member instance (_:Map, g:_->_         , _) = (>>) g
  
negative.code: // Monad class ------------------------------------------------------------
  module Monad =
      type Bind = Bind with
          static member        instance (Bind, x:seq<_>       , _:seq<'b>       ) = fun (f:_->seq<'b>  )  -> Seq.collect   f x
          static member        instance (Bind, x:Task<'a>    , _:'b Task     ) = fun (f:_->Task<'b> ) -> x.ContinueWith(fun (x: Task<_>) -> f x.Result).Unwrap()
  
          static member        instance (Bind, x:option<_>    , _:option<'b>   ) = fun (f:_->option<'b>) -> Option.bind   f x
          static member        instance (Bind, x:List<_>      , _:List<'b>     ) = fun (f:_->List<'b>  ) -> List.collect  f x
          static member        instance (Bind, x:_ []         , _:'b []        ) = fun (f:_->'b []     ) -> Array.collect f x
  