anchor.diff:      | _ -> failwith "lex:unrecognized OCaml-style escape in string"
     let stringchar =
         some (fun i -> i <> "\\" && i <> "\"")
  -      <|> (a "\\" .>>. escapecode |>> snd) in
  +      <|> (a "\\" .>>. escapecode |>> snd)
     let string = a "\"" .>>. many stringchar .>>. a "\"" |>> (fun ((_,s),_) -> "\""^implode s^"\"")
     let rawtoken = (string <|> some isbra <|> septok <|> ident) |>> (fun x -> Ident x)
     let simptoken = many (some isspace) .>>. rawtoken |>> (reserve << snd)
     let rec tokens i =
  -    try let (t,rst) = simptoken i in
  +    try let (t,rst) = simptoken i
           if t = !comment_token then
             (many (fun i -> if i <> [] && hd i <> "\n" then 1,tl i
                             else raise Noparse) .>>. tokens |>> snd) rst
           else
  -          let toks,rst1 = tokens rst in t::toks,rst1
  -    with Noparse -> [],i in
  +          let toks,rst1 = tokens rst
  +          t::toks,rst1
  +    with Noparse -> [],i
     fst << (tokens .>>. many (some isspace) .>>. finished |>> (fst << fst))
   
   (* ------------------------------------------------------------------------- *)
  
positive.code:         failwith (err ^ " expected")
  
  let rec listof prs sep err =
      prs .>>. many (sep .>>. fix err prs |>> snd) |>> (fun (h, t) -> h :: t)
  
  let nothing input = [], input
  
  let elistof prs sep err =
      listof prs sep err <|> nothing;;
  
  let leftbin prs sep cons err =
      prs .>>. many (sep .>>. fix err prs) |>>
      (fun (x,opxs) ->
          let ops, xs = unzip opxs
          itlist2 (fun op y x -> cons op x y) (rev ops) (rev xs) x);;
  
  let rightbin prs sep cons err =
      prs .>>. many (sep .>>. fix err prs) |>>
  
negative.code:   <|> ((a (Resword "if")) .>>. preterm .>>. a (Resword "then") .>>. preterm .>>. a (Resword "else") .>>. preterm |>> lmk_ite)
    <|> ((a (Resword "[")) .>>. elistof preterm (a (Resword ";")) "term" .>>. a (Resword "]") |>> (pmk_list << snd << fst))
    <|> ((a (Resword "{")) .>>.
          (elistof nocommapreterm (a (Ident ",")) "term" .>>.  a (Resword "}") |>> lmk_setenum
            <|> preterm .>>. a (Resword "|") .>>. preterm .>>. a (Resword "}") |>> lmk_setabs
            <|> preterm .>>. a (Resword "|") .>>. preterm .>>. a (Resword "|") .>>. preterm .>>. a (Resword "}") |>> lmk_setcompr) |>> snd)
    <|> ((a (Resword "match")) .>>. preterm .>>. a (Resword "with") .>>. clauses |>> (fun (((_,e),_),c) -> Combp(Combp(Varp("_MATCH",dpty),e),c)))
    <|> ((a (Resword "function")) .>>. clauses |>> (fun (_,c) -> Combp(Varp("_FUNCTION",dpty),c)))
    <|> ((a (Ident "#")) .>>. identifier .>>. possibly (a (Resword ".") .>>. identifier |>> snd) |>> lmk_decimal)
  