Re-Error

(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