Speaking of invariants, from time to time I would like Racket to know some properties about its usual operators, so that some usual treatments get simplified and can be easily generalized.
For example, considering group theory, properties like 'identity-element', 'absorbing-elements', 'inverse-operator', 'commutative?', 'associative?' and such could be attached to operators like `+', `*', `max', `string-append', `hc-append', etc. Forms like `for/op' could use this information to know how to loop and accumulate, and even possibly to optimize the code, even for newly created operators. In the simple case of + and such, one also only needs to define the binary operator, and the multi-argument procedure can be generated automatically. Of course it needs not be tied to group/category/mathematical theory. It can be about whatever is useful. It's only an idea, in case this resonates for someone. Laurent
_________________________ Racket Developers list: http://lists.racket-lang.org/dev