anchor.diff:  // 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:Id<'a>       , _:'b Id        ) = fun (f:_->Id<'b>    ) -> Id(f x)
  +
   #if NOTNET35
  -        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()
   #endif
  +
           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
  
positive.code: 
  module Applicative =
      type Pure = Pure with
  #if NOTNET35
          static member        instance (Pure, _:seq<'a>       ) = fun x -> Seq.singleton x :seq<'a>
          static member        instance (Pure, _:'a Task       ) = fun x -> 
              let s = TaskCompletionSource()
              s.SetResult x
              s.Task
  #endif
          static member        instance (Pure, _:option<'a>    ) = fun x -> Some x      :option<'a>
          static member        instance (Pure, _:List<'a>      ) = fun x -> [ x ]       :List<'a>
          static member        instance (Pure, _:'a []         ) = fun x -> [|x|]       :'a []
  
negative.code:     type Extend = Extend with
          static member        instance (Extend, (w:'w, a:'a), _:'w *'b) = fun (f:_->'b) -> (w, f (w,a))        
          static member inline instance (Extend, (g:'m -> 'a), _:'m->'b) = fun (f:_->'b) a -> f (fun b -> g (mappend a b))
          static member        instance (Extend, (g:'a Id   ), _:'b Id ) = fun (f:Id<'a>->'b) -> f g
  
  #if NOTNET35
          static member        instance (Extend, (g:'a Task), _:'b Task) = fun (f:Task<'a>->'b) -> g.ContinueWith(f)
  #endif
  
          // Restricted
          static member        instance (Extend, s:List<'a>, _:List<'b>) = fun g -> 
              let rec tails = function [] -> [] | x::xs as s -> s::(tails xs)
  