Function composition is not always suitable. Many operations are intrinsically atomic all-or-nothing. As for function currying, I find it harmful because it encourages partially-completed chains of logic to be passed around and makes it very difficult to read the code and figure out what is happening. Operations which would normally considered 'atomic' end up traversing a lot of files and violating the separation of concerns principle. They can make the code brittle and unmaintainable if not used carefully. The main problem I have with them is that they don't add any real value. People mostly use currying because they find it intellectually appealing but they can't describe what the actual practical benefits are in terms of code robustness and maintainability. In a practical sense, I mostly see negatives.