So does Cat have names or not, and does it have rewriting rules or not?
Okay, I’ve definitely not been clear about an important aspect of Cat: Cat is actually several different languages in one. The specification (which isn’t finished yet) will specify that Cat has several different levels of implementation, which have straightforward mappings into each other.
Level 0 Cat: Point free (i.e. no named parameters).
Level 1 Cat: Allows named function parameters. You can write code like “define swap(x y) { y x }”. This version is in testing and almost ready to release. This will be the version most people are likely to use for direct programming.
Level 2 Cat: Level 1 Cat with an embedded macro language. The macro language is applied after type checking.
Macro Language: The macro language, is a declarative rewriting language I have been talking about in other blog postings. The semantics and syntax are still under development. A preview of the syntax under consideration is available here on the concatenative mailing list.