anchor.diff:        | Choice2Of2 x -> Choice2Of2 x
   
     let inline (<!>) f x = map f x
  -  let inline lift2 f a b = f <!> a <*> b
  -
  -  let inline ( *>) a b = lift2 (fun _ z -> z) a b
  -  let inline ( <*) a b = lift2 (fun z _ -> z) a b
  +  let inline map2 f a b = f <!> a <*> b
  +
  +  let inline ( *>) a b = map2 (fun _ z -> z) a b
  +  let inline ( <*) a b = map2 (fun z _ -> z) a b
   
     let bind f = 
         function
  
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 = Yield(x, Empty)
    let inline (>>=) m f = bind m f
    let inline (<*>) f m = f >>= fun f' -> m >>= fun m' -> returnM (f' m')
    let inline map f m = m >>= fun x -> returnM (f x)
    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 = m >>= (fun _ -> f)
    
    module List =
  