Eta reduction f = x => (expr_without_x) (x) // eta reduction f = expr_without_x In case there are more params one can reduce last (innermost) param with last argument f = w => x => (expr_without_x) (w) (x) // eta reduction f = w => (expr_without_x) (w) // now you can even reduce w, if .. Special cases: 1) x is not last parameter, cannot reduce f = w => x => (expr_without_x) (x) (w) to make it last parameter, you can use flip before reduction f = w => x => flip (expr_without_x) (w) (x) // eta f = w => flip (expr_without_x) (w) 2) x appears at the end but is nested in the term Replace nesting with compose f = x => g(h(x)) // compose f = x => cmp(g)(h)(x) // now we can eta-reduce f = cmp(g)(h) Referential transparency (part of), equational reasoning, term algebra f(x)(y)(z) // and g = f(x) // follows f(x)(y)(z) == g(y)(z) Any subterm can be extracted but mind the (maybe implicit) parentheses! => allows many optimizations and refactorings