anchor.diff:      if List.length l < 10
       then separate_map_last sep f l
       else flow_map_last sep f l
  +
  +let separate_or_flow sep l = separate_map_or_flow sep id l
   
   let soft_surround_separate_map n b void_ opening sep closing f xs =
     if xs = []
  
positive.code:   | QForall (bs, trigger, e1)
    | QExists (bs, trigger, e1) ->
        prefix2
          (soft_surround 2 0 (p_quantifier e ^^ space) (p_binders true bs) dot)
          (p_trigger trigger ^^ p_noSeqTerm ps pb e1)
    | _ -> p_simpleTerm ps pb e
  
  
negative.code:     let datacon_doc () =
          separate_map hardline p_constructorBranchAndComments ct_decls
      in
      p_typeDeclPrefix pre lid bs typ_opt, (fun () -> jump2 (datacon_doc ()))
  
  and p_typeDeclPrefix (kw, fsdoc_opt) lid bs typ_opt =
    if bs = []
    then
      match fsdoc_opt with
      | None -> group (kw ^/^ group (p_ident lid ^/^ equals))
      | Some fsdoc -> separate hardline [kw; p_fsdoc fsdoc; group (p_ident lid ^/^ equals)]
    else
      let binders_doc =
        p_typars bs [optional (fun t -> colon ^^ space ^^ p_typ false false t) typ_opt; equals]
      in
      match fsdoc_opt with
      | None -> group (hang 2 <| (kw ^/^ p_ident lid) ^/^ binders_doc)
      | Some fsdoc -> separate hardline [kw; p_fsdoc fsdoc; group (hang 2 (p_ident lid ^/^ binders_doc))]
  
  and p_recordFieldDecl ps (lid, t, doc_opt) =
    (* TODO : Should we allow tagging individual field with a comment ? *)
  