anchor.diff:      match l with
         [] -> true
       | h::t -> forall (r h) t && pairwise r t
  +
     let rec pfrees ptm acc =
       match ptm with
         Varp(v,pty) ->
  
positive.code:             with
              | Noparse -> try_parsers tl i
      let parser_list = ref([] : (string * (lexcode list -> preterm * lexcode list)) list)
      (fun dat -> parser_list := dat :: (!parser_list)), (fun key -> 
          try 
              parser_list := snd(Option.get <| remove (fun (key', _) -> key = key') (!parser_list))
          with
          | Failure _ -> ()), (fun () -> !parser_list), (fun i -> try_parsers (!parser_list) i)
  
  (* ------------------------------------------------------------------------- *)
  (* Initial preterm parsing. This uses binder and precedence/associativity/   *)
  
negative.code:     | Combp(p1,p2) -> pfrees p1 (pfrees p2 acc)
      | Absp(p1,p2) -> subtract (pfrees p2 acc) (pfrees p1 [])
      | Typing(p,_) -> pfrees p acc
  
    let pdest_eq =
        function
        | (Combp(Combp(Varp(("="|"<=>"),_),l),r)) -> (l,r)
        | _ -> failwith "pdest_eq: Unhandled case."
  
    let pmk_let (letbindings,body) =
      let vars,tms = unzip (map pdest_eq letbindings)
      let _ = warn(not (pairwise (fun s t -> intersect(pfrees s []) (pfrees t []) = []) vars)) "duplicate names on left of let-binding: latest is used"
  