I blogged about how to do functional programming in Kotlin:
https://medium.com/@octskyward/kotlin-fp-3bf63a17d64a
It covers ADTs, lazyness, transactional memory (both software and hardware), immutability, tail recursion, currying and partial application.
I hope it’s useful to someone.