Full source at: https://gist.github.com/mrange/7c39333de480a8de5c812a1f6ba70173
A popular approach in Functional Languages to create parsers is to use parser combinators.
Parser combinators provide a way to compose parser of ever increasing complexity from simple parsers. Parser combinators