Choosing implementation depending on class instances using rewriting rules