Я не знаю, почему вы получаете именно эту ошибку, а потому что синтаксическое преобразование вместо обычного оператора, но я подозреваю, что BuckleScript может не проверять |.
рекурсивно, а вместо этого передает его компилятору, который определяет его быть недопустимым «идентификатором значения», что бы это ни значило.
Но в любом случае я не вижу, как это будет работать на практике. Он хорошо работает с |>
, потому что это обычный оператор, который полагается на карри. Каждое приложение |>
будет «добавлять» аргумент и из-за каррирования возвращает фактическое значение, либо конечное значение, либо частично примененную функцию, например ::
.
3 |> add <=> add(3) <=> y => add(3, y)
Что вернет частичное применение |.
? Карри не работает в обратном направлении. Единственная возможность - вернуть явную функцию, которая применяет последний аргумент, например, x => add(x, 3)
, но это требует знания арности функции и, следовательно, больше не является синтаксическим преобразованием.
|.
- это, на мой взгляд, неприятный хак, который не вписывается в язык естественным образом, но все равно был вынужден использовать BuckleScript, и его использование, к сожалению, поощряется, несмотря на его недостатки и серьезные негативные последствия. Мой совет (как обычно) избегать этого. В Reason вы можете использовать |> _
вместо этого, когда это необходимо, например, 3 |> add(_, 2) <=> 3 -> add(2)
.