anchor.diff:    (* TODO : this should be refined when head is an applicative pattern (function definition) *)
     let pat, ascr_doc =
       match pat.pat with
  -    | PatAscribed (pat, (t, None)) -> pat, group (colon ^^ space ^^ p_tmArrow p_tmNoEq t)
  -    | PatAscribed (pat, (t, Some tac)) -> pat, group (colon ^^ space ^^ p_tmArrow p_tmNoEq t) ^^ group (str "by" ^^ space ^^ p_atomicTerm tac)
  +    | PatAscribed (pat, (t, None)) -> pat, group (colon ^^ space ^^ p_tmArrow (Arrows (2, 2)) p_tmNoEq t)
  +    | PatAscribed (pat, (t, Some tac)) -> pat, group (colon ^^ space ^^ p_tmArrow (Arrows (2, 2)) p_tmNoEq t) ^^ group (str "by" ^^ space ^^ p_atomicTerm tac)
       | _ -> pat, empty
     in
     match pat.pat with
  
positive.code:             (p_trigger trigger))) term_doc)
    | _ -> p_simpleTerm ps pb e
  
  and p_quantifier e = match e.tm with
      | QForall _ -> str "forall"
      | QExists _ -> str "exists"
  
negative.code:      has_fsdoc: bool;
       is_fsdoc: bool} //is a standalone fsdoc
  let dummy_meta = {r = dummyRange; has_qs = false; has_attrs = false; has_fsdoc = false; is_fsdoc = false}
  
  type annotation_style =
    | Binders of int * int // val f (x1:t1) ... (xn:tn) : C
    | Arrows of int * int //  val f : x1:t1 -> ... -> xn:tn -> C
  
  // TODO: rewrite in terms of with_comment_sep
  let with_comment printer tm tmrange origin =
  