Too many times, a value could not be found nor make sense to compute with the data at hand. The lack of a value is something to contend with, and failing to contend with it well has proven to be a billion dollar mistake. Adama uses the maybe (or optional) pattern. For example, the following defines an age which may or may not be available.
The concept of
maybe<> enforces better coding-discipline by leveraging the type system as a forcing function to prevent bad things from happening. Segmentation fault, NullPointerException, and index out of range exceptions are avoided entirely. Within Adama, a failure feels catastrophic as a failure signals the end of the game. This is a core motivation why Adama is a closed ecosystem (i.e. no disk or networking) such that the failures are limited to logic bugs or division by zero (and the jury is out as to whether or not division should result in a
maybe<double> or not)
Data can always freely enter a maybe using regular assignment.
To safely retrieve data, the safe way is using an
if ... as statement.
An instance of a maybe with a given type can be generated on the fly via
And an instance of a maybe with a given value can be generated via
maybe(Expr) . Example: