Consider: what is a parser? Really, a parser is just a
function that consumes less-structured input and
produces more-structured output. By its very nature, a
parser is a partial function—some values in the domain
do not correspond to any value in the range—so all
parsers must have some notion of failure. Often, the
input to a parser is text, but this is by no means a
requirement (...)
Then, the title of the post could be: Leverage the type system to represent your data, not validating it post-facto