anchor.diff:               (colAutoNlnSkip0 sepNone es (fun (s, e) ->
                                   (!- (sprintf ".%s" s) 
                                       +> ifElse (hasParenthesis e) sepBeforeArg sepSpace +> genExpr e)))
  +
       | DotGetApp(e, es) -> 
           noNln (genExpr e)
           +> indent 
  
positive.code:     | PatLongIdent(ao, s, ps, tpso) -> 
          let aoc = opt sepSpace ao genAccess
          let tpsoc = opt sepNone tpso (fun (ValTyparDecls(tds, _, tcs)) -> genTypeParam tds tcs)
          match ps with
          | [] ->  aoc -- s +> tpsoc
          | [PatSeq(PatTuple, [p1; p2])] when s = "(::)" -> aoc +> genPat p1 -- " :: " +> genPat p2
          | [p] -> aoc -- s +> tpsoc +> ifElse (hasParenInPat p) sepBeforeArg sepSpace +> genPat p
          /// This pattern is potentially long
          | ps -> atCurrentColumn (aoc -- s +> tpsoc +> sepSpace +> colAutoNlnSkip0 sepSpace ps genPat)
      | PatParen(PatConst(c)) -> genConst c
      | PatParen(p) -> sepOpenT +> genPat p +> sepCloseT
      | PatSeq(PatTuple, ps) -> atCurrentColumn (colAutoNlnSkip0 sepComma ps genPat)
  
negative.code:         genPreXmlDoc px
          +> colPost sepNln sepNln ats genAttribute -- "module " +> opt sepSpace ao genAccess -- s +> sepEq
          +> indent +> sepNln +> col sepNln mds genSigModuleDecl +> unindent
  
      | SigOpen(s) ->
          !- (sprintf "open %s" s) +> sepNln
      | SigTypes(t::ts) ->
  