But of course this new symbol had no function attached, so an error occurred at evaluation time. Calling use-package now caused Lisp to try and connect the current package to tables . It properly noticed that you already have a deftable , namely the one it just created in the previous expression. First, you need to get into the habit of calling use-package immediately after load or require . Second, you can recover by using unintern to remove th offending symbols and calling use-package again.
Many Lisp environments offer an automatic unintern as an error response option.
If you have, then you've missed the whole point of having packages. Packages are supposed to avoid name conflicts by hiding internal function and variable names. But if you do an in-package , you put your code into the package in question, thereby guaranteeing that if you use any of the same names, you will clobber the package's code. Use use-package to make the exported symbols of packages you need available to your code. If you have, then the odds are good that your code will not be portable.