Frege is a Haskell for the JVM. It is so pure that it does not even have assignments in the language! What sounds silly at first is actually extremely beneficial for code to stay correct under composition, refactoring, and parallel execution. This tutorial touches on the various benefits of this approach but mainly focusses on the practical side of development: how to program with the help of purity and how to make it accessible to Java projects.
Be prepared to see a lot of live coding.