anchor.diff:    and sumtype i = rightbin prodtype (a (Ident "+")) (btyop "sum") "type" i
     and prodtype i = rightbin carttype (a (Ident "#")) (btyop "prod") "type" i
     and carttype i = leftbin apptype (a (Ident "^")) (btyop "cart") "type" i
  -  and apptype i = (atomictypes .>>. (type_constructor >> (fun x -> [x]) <|> nothing) >> mk_apptype) i
  -  and atomictypes i = (((a (Resword "(")) .>>. typelist .>>. a (Resword ")") >> (snd << fst)) <|> type_atom >> (fun x -> [x])) i
  +  and apptype i = (atomictypes .>>. (type_constructor |>> (fun x -> [x]) <|> nothing) |>> mk_apptype) i
  +  and atomictypes i = (((a (Resword "(")) .>>. typelist .>>. a (Resword ")") |>> (snd << fst)) <|> type_atom |>> (fun x -> [x])) i
     and typelist i = listof pretype (a (Ident ",")) "type" i
     pretype
   
  
positive.code:     | _ -> failwith "lex:unrecognized OCaml-style escape in string"
    let stringchar =
        some (fun i -> i <> "\\" && i <> "\"")
        <|> (a "\\" .>>. escapecode >> snd) in
    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
          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
    fst << (tokens .>>. many (some isspace) .>>. finished >> (fst << fst))
  
  (* ------------------------------------------------------------------------- *)
  (* Parser for pretypes. Concrete syntax:                                     *)
  
negative.code:     with Noparse ->
          [],input
  
  let (|>>) prs treatment input =
      let result,rest = prs input
      treatment result, rest
  
  