anchor.diff:      // ^- <lvalue> ...
               (pstring "=" >>. ws >>. parseExpression .>> ws .>> pstring ";")
                     //             ... = <expression> ;
  -            (fun l r -> Assign (l, r))
  +            (curry Assign)
   
   /// Parser for blocks.
   let parseParSet =
  
positive.code:     chainl1 basic
              // ^- <basic-view>
              //  | <basic-view> ...
              (stringReturn "*" (fun x y -> join (x, y)) .>> ws)
              //                 ... * <view>
  
  /// Takes a view name and optional argument list, and creates the
  
negative.code:     pipe3ws (pstring "if" >>. ws >>. inParens parseExpression)
              (parseBlock .>> ws .>> pstring "else")
              parseBlock
              (curry3 If)
  
  /// Parser for atomic commands (not the actions themselves; that is parseAtomic).
  let parseAtomicCommand =
  