anchor.diff:  
   let rec atleast n prs i =
       (if n <= 0 then many prs
  -     else prs .>>. atleast (n - 1) prs >> (fun (h,t) -> h :: t)) i
  +     else prs .>>. atleast (n - 1) prs |>> (fun (h,t) -> h :: t)) i
   
   let finished input =
       if input = [] then 0, input
  
positive.code:   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 typelist i = listof pretype (a (Ident ",")) "type" i
    pretype
  
  
negative.code:     | (Ident n as tok) ->
          if is_reserved_word n then Resword(n) else tok
      | t -> t
    let stringof p = atleast 1 p |>> end_itlist (^)
    let simple_ident = stringof(some isalnum) <|> stringof(some issymb)
    let undertail = stringof (a "_") .>>. possibly simple_ident |>> collect
    let ident = (undertail <|> simple_ident) .>>. many undertail |>> collect
    let septok = stringof(some issep)
    let escapecode i =
      match i with
  