There are small differences between the current K.U.Leuven CHR system in SWI-Prolog, older versions of the same system and SICStus' CHR system.
The current system maps old syntactic elements onto new ones and ignores a number of no longer required elements. However, for each a deprecated warning is issued. You are strongly urged to replace or remove deprecated features.
Besides differences in available options and pragmas, the following differences should be noted:
The old ECLiPSe CHR implementations features a label_with/1 construct for labeling variables in CHR constraints. This feature has long since been abandoned. However, a simple transformation is all that is required to port the functionality.
label_with Constraint1 if Condition1. ... label_with ConstraintN if ConditionN. Constraint1 :- Body1. ... ConstraintN :- BodyN.
is transformed into
:- chr_constraint my_labeling/0. my_labeling \ Constraint1 <=> Condition1 | Body1. ... my_labeling \ ConstraintN <=> ConditionN | BodyN. my_labeling <=> true.
Be sure to put this code after all other rules in your program! With my_labeling/0 (or another predicate name of your choosing) the labeling is initiated, rather than ECLiPSe's chr_labeling/0 .