Global debug level, which controls the verbosity of debug output
on the console. The default is 0 meaning no debug output. The
--debug command line flag sets it to 1, or --debug=N sets it to
a higher value (note: not --debug N for some reason). This uses
unsafePerformIO and can be accessed from anywhere and before normal
command-line processing. After command-line processing, it is also
available as the debug_ field of CliOpts.

Print a showable value to the console, with a message, if the
debug level is at or above the specified level (uses
unsafePerformIO).
Values are displayed with show, all on one line, which is hard to read.

Print a showable value to the console, with a message, if the
debug level is at or above the specified level (uses
unsafePerformIO).
Values are displayed with ppShow, each field/constructor on its own line.

Print a showable value to the console, with a message, if the
debug level is at or above the specified level (uses
unsafePerformIO).
Values are displayed with pprint. Field names are not shown, but the
output is compact with smart line wrapping, long data elided,
and slow calculations timed out.

Print a message and parsec debug info (parse position and next
input) to the console when the debug level is at or above
this level. Uses unsafePerformIO.
pdbgAt :: GenParser m => Float -> String -> m ()

The trace function outputs the trace message given as its first argument,
before returning the second argument as its result.

For example, this returns the value of f x but first outputs the message.

trace ("calling f with x = " ++ show x) (f x)

The trace function should only be used for debugging, or for monitoring
execution. The function is not referentially transparent: its type indicates
that it is a pure function but it has the side effect of outputting the
trace message.

A string received from or being passed to the operating system, such
as a file path, command-line argument, or environment variable name or
value. With GHC versions before 7.2 on some platforms (posix) these are
typically encoded. When converting, we assume the encoding is UTF-8 (cf
http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html#UTF8).