That's the algorithm for the common lisp reader. Writing a recursive descent parser based on that spec is fairly straightforward.
And once you hand write your own recursive descent parser you'll probably not want to give up the control that gives you to a parser generator. Yuck.
And, while a Haskell-style type system makes them nicer, they work really well in dynamically typed languages too. (e.g. https://github.com/drewc/smug )