In C it is common for functions to return NULL when a valid pointer value is not possible. Failure to check for NULL pointers is a major source of program crashes.
Mythryl has a similar convention, except that the compiler implements compiletime checks sufficient to guarantee that you will never have a runtime crash due to lack of NULL pointer checking.
Function results are wrapped using THE if they are not NULL. The two possibilities are then distinguished using a case. When you are sure a value is non-NULL, you may use the function the to strip off the THE:
#!/usr/bin/mythryl fun safe_divide i j: Null_Or( Int ) = if (j != 0) THE (i / j); else NULL; fi; fun test i j = case (safe_divide i j) THE k => printf "%d / %d == %d\n" i j k; NULL => printf "You can't divide %d by %d!\n" i j; esac; test 4 2; test 4 0; printf "6 / 3 == %d\n" (the (safe_divide 6 3)); printf "6 / 0 == %d\n" (the (safe_divide 6 0));
When run this will yield:
linux$ ./my-script 4 / 2 == 2 You can't divide 4 by 0! 6 / 3 == 2 Uncaught exception NULL_OR