When I write imperative code it's like: f_ified_x = f(x) g_f_ified_x = g(f_ified_x) result = h(g_f_ified(x)) When I write functional code it's like: (h (g (f x))) Am I doing it wrong? It's nice not to name intermediate steps but as soon as I won't to use 1 value twice I need to.