https://medium.com/swlh/functional-programming-goes-hand-in-hand-with-immutable-data-structures-93a04feba1f3