https://fsharpforfunandprofit.com/series/understanding-parser-combinators/