expressions can be created with the with-expresso macro
rules are triples of match transformation and guard
the expressions dictate the specific matching function
the transformation and guard can be normal core.logic relations