It is confusing that the error handler gets a sort of packaged version of the arguments from throw and error. I don't remember why this was done -- Guile 1.8 (my starting point) has (throw type . info), but I can't remember how they passed that to the catch error handler. It's not impossible that I overlooked a dot somewhere...