anchor.diff:          match List.tryFind test infix_prim_ops with
           | None -> None
           | Some (_, prio, txt) ->
  -            let d1 = doc_of_exp (prio, Left ) env e1 in
  -            let d2 = doc_of_exp (prio, Right) env e2 in
  +            let d1 = doc_of_exp rg (prio, Left ) env e1 in
  +            let d2 = doc_of_exp rg (prio, Right) env e2 in
               Some (maybe_paren outer prio (reduce1 [d1; text txt; d2]))
       end
   
       | (Exp_fvar (x, _), [(e, _)])
           when is_prim_ns x.v.ns && x.v.ident.idText = "op_Negation" -> begin
   
  -        let d = doc_of_exp (min_op_prec, NonAssoc) env e in
  +        let d = doc_of_exp rg (min_op_prec, NonAssoc) env e in
           Some (cat1 (text "not") (parens d)) (* FIXME *)
       end
   
       | _ -> None
   
   (* -------------------------------------------------------------------- *)
  -and doc_of_constr (env : env) c args =
  +and doc_of_constr (rg : range) (env : env) c args =
       let x = c.ident.idText in
   
       match args with
  
positive.code: }
  
  (* -------------------------------------------------------------------- *)
  let unexpected () =
      failwith "ocaml-backend-unexpected-construction"
  
  (* -------------------------------------------------------------------- *)
  let unsupported () =
      failwith "ocaml-backend-unsupported-construction"
  
  (* -------------------------------------------------------------------- *)
  let ocaml_u8_codepoint (i : byte) =
  
negative.code:     | _  -> reduce1 [text x; group (parens (combine (text ", ") args))]
  
  (* -------------------------------------------------------------------- *)
  and doc_of_let (rg : range) (rec_ : bool) (env : env) (x, e) =
      let lenv = push env x.realname.idText x.ppname.idText in
      let x    = resolve lenv x.realname.idText in
      let d    = doc_of_exp rg (min_op_prec, NonAssoc) (if rec_ then lenv else env) e in
      lenv, (reduce1 [text x; text "="; d])
  
  (* -------------------------------------------------------------------- *)
  and doc_of_toplet (rg : range) (rec_ : bool) (env : env) (x, e) =
      let lenv = push env x.idText x.idText in
      let x    = resolve lenv x.idText in
  
  