anchor.diff:          | Yellow -> 3
           | Blue -> 4
           | Magenta -> 5
  -        | Cyan -> 6 
  +        | Cyan -> 6
           | White -> 7
   
       let code c = sprintf "%u" (30 + colCode c)
   
  -    let prefix = "\u001b[" + (String.concat ";" <| List.map code s) + "m"
  -    let suffix = "\u001b[0m"
  +    let codify = List.map code >> String.concat ";"
  +
  +    let prefix = "\u001b[" + codify s + "m"
  +    let suffix = "\u001b[" + withDefault "0" (Option.map codify l) + "m"
       prefix + d + suffix
   
   /// <summary>
  
positive.code:  *)
  
  
  // Hacky merge between two VSep sequences 
  let vmerge a b = 
    let rec interleave = function //same as: let rec interleave (xs, ys) = match xs, ys with
      |([], ys) -> ys
      |(xs, []) -> xs
      |(x::xs, y::ys) -> x :: y :: interleave (xs,ys)
  
    match a, b with 
      | (VSep (xs, i), VSep (ys, j))  -> 
             let xy = interleave (List.ofSeq xs, List.ofSeq ys) in 
             VSep (Seq.ofList xy, Nop)
      | _ -> Nop
  
  
negative.code: /// <summary>
  ///     Prints a <see cref="Doc"/> with full styling.
  /// </summary>
  let printStyled = printState { Level = 0; CurrentStyle = None; UseStyles = true }
  
  /// <summary>
  ///     Prints a <see cref="Doc"/> with no styling.
  /// </summary>
  let printUnstyled = printState { Level = 0; CurrentStyle = None; UseStyles = false }
  
  
  /// <summary>
  