This is almost exactly a Maybe[String], but the sense of
'isDefined' is backward in a Maybe type. The Nope would represent Ok, so
isEmpty would mean Ok, and isDefined would mean error, and that's so
unintuitive, that we define our own Maybe-like value class here
so that isOK and isError are the tests.
Define an OK or Error type.
This is almost exactly a Maybe[String], but the sense of 'isDefined' is backward in a Maybe type. The Nope would represent Ok, so isEmpty would mean Ok, and isDefined would mean error, and that's so unintuitive, that we define our own Maybe-like value class here so that isOK and isError are the tests.