In some circumstances, you may want to stop your program immediately without allowing any caller of the function to catch or handle the error. For that you can use the built in function base.bug
in Unison. Unlike Optional
or Either
—if you call base.bug
in a function, you do not need to represent the possibility of the failure in the function's signature as a data type for the caller to manage.
You can provide a term or expression of any type to base.bug
and the UCM will render that value to the console.
superProgram : Boolean -> Nat
superProgram bool =
if Boolean.not bool then
bug (Generic.failure "Fatal Issue Encountered" bool)
else 100
Calling the function above with superProgram false
will abort the running program with the message
💔💥
I've encountered a call to builtin.bug with the following value:
Failure (typeLink Generic) "Fatal Issue Encountered" (Any false)
🚩 Use base.bug
judiciously. Common exception handling via catch
does not handle calls to base.bug
. To catch a call to base.bug
, use IO.catchAll
.