| > How do people who write Clojure deal with lack of type checking If you've worked in Python, Ruby or JS it's pretty similar. What I do is I use variable names that make it more obvious what type things are. I also make use of destructuring and Clojure Spec to indicate what keys a map has or what values in a tuple are supposed to be. Also the REPL can help you quickly explore the state and functions which you can use to try and inspect the types, that's useful when trying to understand someone else's code base which might not have had the most readable code. And since you do REPL driven development, as I code I run the code constantly in the REPL which will throw type errors when I make one. It has the bonus of catching logical errors as well as helps me figure out how to implement what I want more quickly. > And auto-complete when it comes to Java library interop You should get some auto-complete here depending on your tooling. It should lost all possible methods of an object, just not constrained to the direct type. For me that's often enough as I know kinda what I'm looking for, so I can find it and auto-complete. If you want the auto-complete to a specific type, you can type hint the object and then the auto-complete will list only methods of that type. Finally, I do rely on the Javadoc a lot. |