So this is probably one of those “don’t do that” things, but I discovered that you can’t negate and redefine interfaces. (Specifically I was trying to rewrite
($Obj is in room $Room) so you could give it a bound $Room and unbound $Obj as well as the other way around.) The following minimal code:
#room (room *) #player (current player *) (* is #in #room) ~(interface ($ is in room $)) ~($ is in room $)
Error: stdlib.dg, line 6131: Interface already declared for '($ is in room $)' at Test.dg:8.
I am thinking that it would be nice to be able to tinker with stdlib interfaces without having to edit the stdlib.dg file, in the same way you can negate a rule and redefine it in another file. To prevent accidental duplicates I think requiring an explicit
~(interface (foo)) would make sense.