OCaml is able to infer types by itself, so what I suggest is that you don't declare any local types, but only the global types (no (a:int) type expressions, but only toplevel type 'a t = 'a -> 'a * 'a). Also, try declaring only some of your types and define only some of your functions at a time (using the toploop, interactive compiler) to see what are the appropriate types the compiler infers.
Besides, you seem to have some errors in the code... for example:
let succeed f =
let parse cont stack errors input = cont (stack f) errors input in
mkparser (End {parse=parse})
;;