(re-error error)
After guard has been triggered, this will take the same error that triggered the guard, and throw it again.
Example:
>> (guard (lambda (e) (write "An error has occurred!\nCall out the Guard!\n" ) (re-error e)) (/ 1 0)) An error has occurred! Call out the Guard! ERROR: bad-args -- attempted divide by zero TRACE: (<program>) (repl) (<program>) (/ 1 0)
This makes it possible to have nested guards, because re-error passes the error on to the next guard in line.
>> (guard (lambda (e) (write "False Alarm!" ))(guard (lambda (e) (write "An erro
r has occurred!\nCall out the Guard!\n" ) (re-error e)) (/ 1 0)))
An error has occurred! Call out the Guard! False Alarm!:: #f