Вы действительно не можете понять, какое поведение вы предлагаете.
Подумайте об этих двух строках:
curry()()()()()("S"); //=> Strawberry // (1)
curry()(); //=> Hello world // (2)
Первая (1) может быть переписана как
let foo = curry()(); // (1a)
foo()()()("S"); // (1b)
Но мы уже знаем из второй строки (2), что
curry()() //=> "Hello world"
, который не является функцией, поэтому foo()
является попыткой вызвать "Hello world"
, как если бы это былофункция.
Я не думаю, что это можно обойтитест, так что, скажем,
curry()().value //=> "Hello world"
// and
curry()()()()()("S").value //=> "Strawberry"
Но это другой вопрос.