Yes, show(io, x) is the the basic thing that should be defined.
print() defaults to calling show.
print() is only different for objects with a canonical text
representation: strings and characters.
dump() isn't really meant to be overloaded; the idea is to spill
everything about an object's state in some universal way.
string() print()s its arguments to a string. This is so
string(Char,Char) and string(String) do what you'd expect.
sshow() show()s its arguments to a string. This is only needed if you
want strings to come out quoted, etc.
write(io, x) writes canonical binary representations, like the 4 bytes
in an Int32. It certainly makes sense to define for new types; a good
example is SubArray, which writes the elements it references without
copying them out first.