The expression problem has a complete and rather elegant solution in mainstream OO languages with generics, invented in 2012 called object algebras:
Video: https://www.infoq.com/presentations/object-algebras
Paper: https://www.cs.utexas.edu/~wcook/Drafts/2012/ecoop2012.pdf
I understand that there is a comparable solution in FP languages called finally tagless interpreters: https://oleksandrmanzyuk.wordpress.com/2014/06/18/from-objec...