I found online this PhD thesis from Gregory J. Duck that illustrates CHR compilation step by step and outlines possible optimizations. A great read!
Note that SWI-Prolog’s chr implementation is by Tom Schrijvers.
Indeed, I think this thesis came after Tom Schrijvers’ implementation, as the author mentions it and its design choices in the class of mature CHR compilers.