Tip of the day: Watch out for * vs. $

I lost well over an hour today, because I defined a trait, by accident, using $ instead of *.

That is:

#noisy-machine
(telling quip $)
(name *) that the machine is quite noisy

caused a giant raft of errors:

Warning: ../lib/hls/tc.dg, line 207: Parameter #2 of ($ recollects $) can be
(partially) unbound, which violates the interface declaration at
../lib/hls/tc.dg:169.
Warning: ../lib/hls/tc.dg, line 389: Rule can leave parameter #2 (partially)
unbound, which violates the interface declaration at ../lib/hls/tc.dg:387.
Warning: ../lib/hls/tc.dg, line 632: Parameter #3 of (understand $ as quip $
from $) can be (partially) unbound, which violates the interface declaration at
../lib/hls/tc.dg:658.
Warning: ../lib/hls/tc.dg, line 404: Argument 1 of now-expression can be
unbound, leading to runtime errors.
Warning: ../lib/hls/tc.dg, line 666: Parameter #1 of (dict $) can be
(partially) unbound, which violates the interface declaration at
../lib/dialog/stdlib.dg:68.
Warning: ../lib/hls/tc.dg, line 662: Rule can leave parameter #2 (partially)
unbound, which violates the interface declaration at ../lib/hls/tc.dg:658.
Warning: ../lib/dialog/stdlib.dg, line 4377: Parameter #1 of (name $) can be
(partially) unbound, which violates the interface declaration at
../lib/dialog/stdlib.dg:60.
Warning: ../lib/hls/tc.dg, line 632: Parameter #3 of (understand $ as quip $
from $) can be (partially) unbound, which violates the interface declaration at
../lib/hls/tc.dg:658.
Warning: ../lib/hls/tc.dg, line 589: Rule can leave parameter #2 (partially)
unbound, which violates the interface declaration at
../lib/dialog/stdlib.dg:90.
Warning: ../lib/hls/tc.dg, line 619: Parameter #1 of (action from quip $ is $)
can be (partially) unbound, which violates the interface declaration at
../lib/hls/tc.dg:453.
Warning: ../lib/dialog/stdlib.dg, line 4377: Parameter #1 of (name $) can be
(partially) unbound, which violates the interface declaration at
../lib/dialog/stdlib.dg:60.
Warning: Hiding further warnings about interface violations. The first warning
usually describes the root cause.
Warning: ../lib/dialog/debug/stddebug.dg, line 57: Argument 1 of now-expression
can be unbound, leading to runtime errors.
Warning: ../lib/dialog/debug/stddebug.dg, line 57: Argument 1 of now-expression
can be unbound, leading to runtime errors.
Warning: ../lib/dialog/debug/stddebug.dg, line 58: Argument 1 of now-expression
can be unbound, leading to runtime errors.
...

If you see something similar in your project, look very carefully for a change like that. It can be hard to spot.

1 Like