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