Inspired by nom, but specifically for strings and with custom error messages.
See an example of use in denotaskshell.