- Name the functions READ-FOO and WRITE-FOO for the foo data type
- Name the functions READ and WRITE and put them in the FOO package
Either way the functions are going into the FOO package.
The advantage of the first is that it's easier to identify that READ-FOO is operating on a foo data object. There is also less risk of name clashes when using the package from a calling package (won't conflict with CL:READ, for instance). Obviously, there are ways to fiddle with the package system to resolve the conflicts, but they're more typing.
The advantage of the second is that it's not redundant when you don't use the package (FOO:READ as opposed to FOO:READ-FOO) and there's generally less typing. The downside is that if you use the package you'll have to shadow things to avoid conflicts with CL:READ, for example.
So, which would you as a programmer using the package prefer to have to deal with?