anchor.diff:        decls |> List.map doc_of_decl |> separate hardline
   
   
  -(* Automatic level assignment *)
  -(* would be perfect with a little of staging... *)
  -
  -type associativity =
  -    | Left
  -    | Right
  -    | NonAssoc
  -
  -type token = either<FStar.Char.char, string>
  -type associativity_level = associativity * list<token>
  -
  -let assign_levels (token_associativity_spec : list<associativity_level>) : string -> int * int * int =
  -    let levels_from_associativity (l:int) = function
  -        | Left -> l, l, l-1
  -        | Right -> l-1, l, l
  -        | NonAssoc -> l, l, l
  -    in
  -    let level_table =
  -        List.mapi (fun i (assoc, tokens) -> (levels_from_associativity i assoc, tokens)) token_associativity_spec
  -    in
  -    let matches_token s = function
  -        | Inl c -> s.[0] = c
  -        | Inl s' -> s = s'
  -    in
  -    let matches_level s (assoc_levels, tokens) =
  -        List.existsb (matches_token s) tokens
  -    in
  -    function s ->
  -        match List.find (matches_level s) with
  -            | Some assoc_levels -> assoc_levels
  -            | _ -> failwith ("Unrecognized operator " ^ s)
  -
  -let level_of_operator =
  -    let spec = [
  -        Left,  [Inl '*' ; Inl '/' ; Inl '%'];
  -        Left,  [Inl '+' ; Inl '-' ];
  -        Right, [Inl '@' Inl '^'] ;
  -        Left,  [Inr "|>"] ;
  -        Left,  [Inl '$'] ;
  -        Left,  [Inl '=' ; Inl '<' ; Inl '>'] ;
  -        Left,  [Inl '&'] ;
  -        Left,  [Inl '|']
  -        ]
  -    in assign_levels spec
  
positive.code:       0, 0, -1
    | '|' ->
        -1, -1, -2
    | _ when op = "&" ->
        -2, -2, -1
    | _ when op = "::" ->
        -3, -3, -2
    | _ ->
        failwith ("invalid first character for infix operator " ^ op)
  
  
negative.code: module FStar.Parser.ToDocument
  
  open FStar
  open FStar.Util
  open FStar.Parser.AST
  open FStar.Ident
  open FStar.Const
  