Another thing to consider is the case when you want to organise your types in a hierarchy. It's easier to write a method that dispatches on all instances of (subtypes of) a given abstract type than one that dispatches on all subtypes of a given abstract type.
So that would be another vote in favor of dispatching on instances.
