A purely-functional library for creating both parsers, pretty-printers, and grammar definitions from a single, type-safe specification of a grammar