The old ECLiPSe CHR implementation 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 .