The implementation currently achieves only bounds-consistency.
?- [X,Y] &:: weekday, rotate(X,1,Y).
X = X{[mo, tu, we, th, fr, sa, su]}
Y = Y{[mo, tu, we, th, fr, sa, su]}
There is 1 delayed goal.
Yes (0.00s cpu)
?- rotate(th,1,fr).
Yes (0.00s cpu)
?- rotate(su,2,tu).
Yes (0.00s cpu)
?- rotate(su,9,tu).
Yes (0.00s cpu)
?- rotate(X,1,fr).
X = th
Yes (0.00s cpu)
?- rotate(su,50,X).
X = mo
Yes (0.00s cpu)
?- rotate(su,-1,X).
X = sa
Yes (0.00s cpu)
?- rotate(tu,1,th).
No (0.00s cpu)
?- ic:(X::0..7), rotate(tu,X,fr).
X = 3
Yes (0.00s cpu)
?- ic:(X::2..4), rotate(tu,X,Y).
X = X{2 .. 4}
Y = Y{[th, fr, sa]}
Delayed goals: ...
?- rotate(X,1,Y).
Arguments have no domains in rotate(X, 1, Y) in module eclipse
Abort
?- X &:: weekday, rotate(X, 1, red).
Arguments have different domains (weekday,colour) in rotate(X, 1, red) ...
Abort