Map a codec's input and output types.
This function allows you to have the parsing fail in a new way.
If you use this function, then you will most likely want to add
documentation about how not every value that the schema specifies will
be accepted.
This function is like
BimapCodec except it also combines one
level of a nested
BimapCodecs.
Example usage
logLevelCodec :: JSONCodec LogLevel logLevelCodec = bimapCodec
parseLogLevel renderLogLevel codec
? "Valid values include
DEBUG, INFO, WARNING, ERROR."