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})
> ;;
there is no End constructor declared.
Have fun, Tom