Programs written in, for example, Java rely a lot on dynamic dispatch.
How are such programs expressed in functional languages such as Haskell?
In other word
Ad-hoc polymorphism is done via typeclasses. More OOP-like DD is emulated with existential types.