anchor.diff:    let inline returnM x = returnM writer x
     let inline (>>=) m f = bindM writer m f
     let inline (<*>) f m = applyM writer writer f m
  -  let inline lift f m = liftM writer f m
  -  let inline (<!>) f m = lift f m
  -  let inline lift2 f a b = returnM f <*> a <*> b
  -  let inline ( *>) x y = lift2 (fun _ z -> z) x y
  -  let inline ( <*) x y = lift2 (fun z _ -> z) x y
  +  let inline map f m = liftM writer f m
  +  let inline (<!>) f m = map f m
  +  let inline map2 f a b = returnM f <*> a <*> b
  +  let inline ( *>) x y = map2 (fun _ z -> z) x y
  +  let inline ( <*) x y = map2 (fun z _ -> z) x y
     let inline (>>.) m f = bindM writer m (fun _ -> f)
   
   module Either =
  
positive.code:   let inline returnM x = returnM state x
    let inline (>>=) m f = bindM state m f
    let inline (<*>) f m = applyM state state f m
    let inline lift f m = liftM state f m
    let inline (<!>) f m = lift f m
    let inline lift2 f a b = returnM f <*> a <*> b
    let inline ( *>) x y = lift2 (fun _ z -> z) x y
    let inline ( <*) x y = lift2 (fun z _ -> z) x y
    let inline (>>.) m f = bindM state m (fun _ -> f)
  
  module Reader =
  
negative.code:   let inline returnM x = returnM reader x
    let inline (>>=) m f = bindM reader m f
    let inline (<*>) f m = applyM reader reader f m
    let inline map f m = liftM reader f m
    let inline (<!>) f m = map f m
    let inline map2 f a b = returnM f <*> a <*> b
    let inline ( *>) x y = map2 (fun _ z -> z) x y
    let inline ( <*) x y = map2 (fun z _ -> z) x y
    let inline (>>.) m f = bindM reader m (fun _ -> f)
  
  module Undo =
  