https://myecobook.life/youlibr-functional-programming-patterns-in-scala-and-clojure-220122