anchor.diff:  (*   (f sep xs[n]) *)
   let separate_map_with_comments_kw prefix sep f xs extract_range =
     let fold_fun (last_line, doc) x =
  -    let r, c = extract_range x in
  -    let doc = place_comments_until_pos 1 last_line (start_of_range r) c doc in
  +    let r, end_c, fsdoc_c = extract_range x in
  +    let doc = place_comments_until_pos 1 last_line (start_of_range r) end_c fsdoc_c doc in
       line_of_pos (end_of_range r), doc ^^ f sep x
     in
     let x, xs = List.hd xs, List.tl xs in
     let init =
  -    let r, c = extract_range x in
  +    let r, _, _ = extract_range x in
       line_of_pos (end_of_range r), f prefix x
     in
     snd (List.fold_left fold_fun init xs)
  
positive.code:   | TopLevelLet(q, lbs) ->
      let let_doc = str "let" ^^ p_letqualifier q in
      separate_map_with_comments_kw let_doc (str "and") p_letbinding lbs
        (fun (p, t) -> Range.union_ranges p.prange t.range, 0)
    | Val(lid, t) ->
      str "val" ^^ space ^^ p_lident lid ^^ group (colon ^^ space ^^ (p_typ false false t))
      (* KM : not exactly sure which one of the cases below and above is used for 'assume val ..'*)
  
negative.code: (* inserted after [prefix] and [sep]. *)
  let separate_map_with_comments prefix sep f xs extract_range =
    let fold_fun (last_line, doc) x =
      let r, end_c, fsdoc_c = extract_range x in
      let doc = place_comments_until_pos 1 last_line (start_of_range r) end_c fsdoc_c doc in
      line_of_pos (end_of_range r), doc ^^ sep ^^ f x
    in
    let x, xs = List.hd xs, List.tl xs in
    let init =
      let r, _, _ = extract_range x in
      line_of_pos (end_of_range r), prefix ^^ f x
    in
    snd (List.fold_left fold_fun init xs)
  