types
Use a more idiomatic way of parsing.

I'm effectively now using the State monad wrapped around a Maybe
wrapping a tuple carrying the result and the stack, specialised for
parsing of [Token]. Unlike the previous approach which required manual
Token stack manipulation, we can now use the nice combinators from Monad,
Applicative and Alternative for this task.