Exploring ways to encode functional concepts like structural pattern matching, type classes and fixed points in Java.