The EQL mechanism is there to allow dispatch to work on individual objects.
Allowing arbitrary predicates for dispatch is not a part of standard Common Lisp. It's also not trivial to make it fit into CLOS dispatch.
The Haskell part is not comparable, since Generic Functions in Common Lisp are an object-oriented mechanism (with multi-dispatch, inheritance and method combinations) and work different.
What you are looking for is called Predicate Dispatch.
Extensions exist. See: http://common-lisp.net/project/closer/filtered.html