Using values that cannot be changed once created to make code more predictable .
Learning to write functions that have no side effects and always produce the same output for the same input . Grokking Functional Programming.epub
Using functional types instead of exceptions to manage errors safely . Using values that cannot be changed once created