anchor.diff:      | Surround of left : Command * mid : Command * right : Command
       | Indent of Command
       | VSkip
  -    | VSep of cmds : Command list * separator : Command
  -    | HSep of cmds : Command list * separator : Command
  +    | VSep of cmds : Command seq * separator : Command
  +    | HSep of cmds : Command seq * separator : Command
       | Nop
   
   let fmt fstr xs = System.String.Format(fstr, Seq.toArray xs) |> String
  
positive.code: /// Horizontally joins a list of commands with no separator.
  let hjoin c = HSep(c, Nop)
  /// Horizontally separates a list of commands with a space separator.
  let hsep = hsepStr " "
  /// Horizontally separates a list of commands with commas.
  let commaSep = hsepStr ", "
  /// Horizontally separates a list of commands with semicolons.
  let semiSep = hsepStr "; "
  /// Horizontally separates a list of commands with colons.
  let colonSep = hsepStr ": "
  
  /// Appends a semicolon to a command.
  let withSemi a = hjoin [a; String ";"]
  
negative.code:     | Surround(left, mid, right) -> printLevel level left + printLevel level mid + printLevel level right
      | Indent incmd -> indent 1 + printLevel (level + 1) incmd
      | VSep(cmds, separator) -> 
          Seq.map (printLevel level) cmds |> String.concat (printLevel level separator + lnIndent level)
      | HSep(cmds, separator) -> Seq.map (printLevel level) cmds |> String.concat (printLevel level separator)
      | Nop -> ""
  
  let print = printLevel 0
  