- Why can't I require/use my
Because here, your namespace is loaded from the disk. For good interop with JVM features, Clojure does some "munging/unmunging" of names depending of them having to be "consumed" by the "clojure side" or the "jvm side" of the equation. So a "_" in a namespace "folder name/file name" has to correspond to a "-" in the namespace name. Check that your namespace on disk is in "project_name/foo.clj", while your namespace is declared as "project-name.foo" (e.g. in a (ns project-name.foo) directive).
- How can I make a namespace A that "exports" all the public symbols from namespaces B and C?
You can't. "Public" symbols are not transitive. As an alternative, you can define a function in namespace A which calls
referfor namespaces B and C, then call that function in any namespace where you want all those symbols to be available. Be aware that this makes it harder for people reading your source code to see where the symbols come from.
- Why doesn't
Because it expands to
#()always expands to include parens around the expression you give it. You might try