The standard library Null_Or api defines access to optional-value functionality.
The Null_Or api is implemented by the null_or package.
The Null_Or api source code is in src/lib/std/src/null-or.api.
The above information is manually maintained and may contain errors.
api { Null_Or X = NULL | THE X; exception NULL_OR; the_else : (Null_Or(X ) , X) -> X; not_null : Null_Or(X ) -> Bool; the : Null_Or(X ) -> X; filter : (X -> Bool) -> X -> Null_Or(X ); join : Null_Or(Null_Or(X ) ) -> Null_Or(X ); apply : (X -> Void) -> Null_Or(X ) -> Void; map : (X -> Y) -> Null_Or(X ) -> Null_Or(Y ); map' : (X -> Null_Or(Y )) -> Null_Or(X ) -> Null_Or(Y ); compose : ((X -> Z) , (Y -> Null_Or(X ))) -> Y -> Null_Or(Z ); compose_partial : ((X -> Null_Or(Z )) , (Y -> Null_Or(X ))) -> Y -> Null_Or(Z );};
The following information is manually maintained and may contain errors. Mythryl’s Null_Or facility corresponds closely to the C/C++ NULL pointer facility. The critical difference is that C/C++ programs can and do crash at runtime when the code attempts to dereference a NULL pointer, whereas in Mythryl static compile-time checking guarantees that this can never happen.
A type Foo is converted to one which also allows NULL values via the Null_Or type function: Null_Or( Foo ).
Mythryl type-checking then requires that values of this type always be checked for NULL values before being used in a computation, typically via code like
fun print_string (maybe_string: Null_Or( String )) = case (maybe_string) NULL => (); string => printf ``Your string is '%s'.'' string; esac;