expression problem: defmulti with pattern match vs. subtype polymorphism vs. extend type protocol protocol-impl dynamically