anchor.diff:          +> atCurrentColumn 
                (colAutoNlnSkip0 sepNone es (fun (s, e) ->
                                   (!- (sprintf ".%s" s) 
  -                                    +> ifElse (hasParenthesis e) sepBeforeArg sepSpace +> genExpr e)))
  +                                    +> ifElse (hasParenthesis e) sepNone sepSpace +> genExpr e)))
   
       | DotGetApp(e, es) -> 
           noNln (genExpr e)
           +> indent 
           +> (col sepNone es (fun (s, e) -> 
                                   autoNln (!- (sprintf ".%s" s) 
  -                                    +> ifElse (hasParenthesis e) sepBeforeArg sepSpace +> genExpr e)))
  +                                    +> ifElse (hasParenthesis e) sepNone sepSpace +> genExpr e)))
           +> unindent
   
       // Unlike infix app, function application needs a level of indentation
       | App(e1, [e2]) -> 
           atCurrentColumn (genExpr e1 +> 
  -            ifElse (hasParenthesis e2) (ifElse (addSpaceBeforeParensFunCall e1 e2) sepBeforeArg sepNone) sepSpace 
  +            ifElse (hasParenthesis e2) (ifElse (addSpaceBeforeParensInFunCall e1 e2) sepBeforeArg sepNone) sepSpace 
               +> indent +> autoNln (genExpr e2) +> unindent)
   
       // Always spacing in multiple arguments
  
positive.code: let sortAndDedup by l =
      l |> Seq.distinctBy by |> Seq.sortBy by |> List.ofSeq
  
  let addSpaceBeforeParensFunCall functionOrMethod arg = 
      match functionOrMethod, arg with
      | _, ConstExpr(Const "()") -> false
      | SynExpr.LongIdent(_, LongIdentWithDots s, _, _), _ ->
          let parts = s.Split '.'
          not <| Char.IsUpper parts.[parts.Length - 1].[0]
      | _ -> true
  
  let addSpaceBeforeParensFunDef p =
      match p with
      | PatParen (PatConst SynConst.Unit) -> false
      | _ -> true
  
  let rec genParsedInput = function
  
negative.code:         match ps with
          | [] ->  aoc -- s +> tpsoc
          | [PatSeq(PatTuple, [p1; p2])] when s = "(::)" -> aoc +> genPat p1 -- " :: " +> genPat p2
          | [p] -> aoc -- s +> tpsoc +> ifElse (hasParenInPat p) (ifElse (addSpaceBeforeParensInFunDef s p) sepBeforeArg sepNone) sepSpace +> genPat p
          // This pattern is potentially long
          | ps -> atCurrentColumn (aoc -- s +> tpsoc +> sepSpace +> colAutoNlnSkip0 sepSpace ps genPat)
  
  