There are small differences between CHR 
in SWI-Prolog and SICStus. Besides differences in available options and 
pragmas, the following differences should be noted:
- The handler/1 declaration
In SICStus every CHR module requires a handler/1 declaration 
declaring a unique handler name. This declaration is valid syntax in 
SWI-Prolog, but will have no effect. A warning will be given during 
compilation.
 - The rules/1 declaration
In SICStus every CHR it is possible to only enable a subset of the 
available rules through the rules/1 declaration. The declaration 
is valid syntax in SWI-Prolog, but will have no effect. A warning will 
be given during compilation.
 - Sourcefile naming
SICStus uses a two-step compiler, where .chr files are 
first translated into .pl files. For SWI-Prolog CHR rules 
may be defined in a file with any extension.