Using multiple dispatch and the type system correctly

This is one of the threads discussing that: Performance drawback with subtyping - #6 by lmiq

and other threads are linked in that one. @skoffer usually post the best answers there (and I am struggling to understand what is going on the middle).