On 25-11-2022 01:03, Zelphir Kaltstahl wrote: > ice-9/boot-9.scm:1685:16: In procedure raise-exception: > ERROR: >   1. &contract-violated >   2. &message: "contract violated" >   3. &origin: bla >   4. &irritants: (> foo 10) >   5. &irritants: (> 10 10) I don't understand this -- (> 10 10) is always false, no? I would interpret such an error message as 'you can't call this procedure at all, it requires a contradiction to hold'. What's the purpose of (> 10 10) here? I guess 'foo=10'? If you want to include the value of 'foo', this can be made more explicit, e.g.: 4. &unsatisfied-constraint: (> foo 10) 5. &argument: foo, 10 (i.e. this &argument condition has two fields) That would avoid the vague '&irritants' -- I mean, A base type used for storing information about the causes of another condition in a compound condition. is rather vague, it could refer to 'the condition causing this condition', or the values of the arguments, or some property of those arguments, or ... > ~~~~ > > Nice! Now I have the value of `foo` in this case as well and that could > be > useful information in cases, when I get a violated contract unexpectedly. > > However, having irritants twice seems a bit weird. Is this something, > that is safe to do? Something expected and probably unchanging in future > versions of GNU Guile? Or does it merely work by chance? > > I could always make another exception type like > "exception-with-irritant-values" > or something and use that, instead of a second "with irritants" call. I don't know if having multiple instances of the same condition type inside a single condition is supported. However, given that &irritants is plural (instead of a singular &irritant), and the documentation also mentions 'causes' (plural!): A base type used for storing information about the causes of another condition in a compound condition. ... why not make the value of &irritants a list, e.g.: > 1. &contract-violated > 2. &message: "contract violated" > 3. &origin: bla > 4. &irritants: ((> foo 10) (> 10 10)) Greetings, Maxime.