https://en.wikipedia.org/wiki/Expression_problem
> The goal is to define a datatype by cases, where one can add new cases to the datatype and new functions over the datatype, without recompiling existing code, and while retaining /static type safety/
So, while there's an easy way to write something with lispy multiple dispatch, it is not a solution, sorry.