anchor.diff:       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 =
  
positive.code:   (* 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)
      | _ -> pat, empty
    in
    match pat.pat with
  
negative.code:           has_attrs = false;
            is_fsdoc = false })
    | Val(lid, t) ->
      // str "val" ^^ space ^^ p_lident lid ^^ group (colon ^^ space ^^ alt_p_typ false false t) //(p_typ false false t))
      group (str "val" ^^ space ^^ p_lident lid ^^ space ^^ (alt_p_typ false false t))
      (* KM : not exactly sure which one of the cases below and above is used for 'assume val ..'*)
    | Assume(id, t) ->
      let decl_keyword =
  