In languages where functions are defined by default, function calls are also displayed. When someone writes (fabc) , the language interprets this as (((fa) b) c) . This does not apply to Clojure.
I believe that creating curry functions in an environment where calls were not made by default creates a conceptual inconsistency - this construction is likely to cause confusion among readers (I mean readers of your code).
If your function has more than two arguments, the definition becomes ugly fast. Suppose a function has 4 arguments. To fully emulate a currying call, you need to handle cases like ((fab) cd) , when someone passes 2 arguments first and then the other two. In this case, an overloaded version of a function with two arguments should return an overloaded function that behaves differently depending on whether it receives 1 or 2 arguments. I suppose you can automate this with macros, but still.
In addition, you miss the opportunity to define default arguments and the & rest construct.
Rafał dowgird
source share