And this:
greet :: String -> String
x -> f x
(addmatches! greet :chef-matches {:before :beginning} ((list? x) :sym) (comment Boolean -> Symbol) (list (apply greet x)) (comment Function -> Recursive...))
And this:
Wouldn't really be writable by a human, because: Can represent any two expressions, for example: addmatches! isn't a separate function. Basically, at compile time, a macro is given the raw untyped tokens from Clojure's parser, and can run all of Clojure's features against them. The *match! macros don't exist at runtime.