Конвейер вычисляет левую часть один раз и затем применяет одно однозначное правило placeholder, insertion, callable или property; форматирование не меняет поток значения.
Политика
В left |> right значение left сохраняется до всех подвыражений справа. Если _ стоит в позиции call argument, каждый допустимый placeholder получает сохранённое значение и implicit insertion отключается. Без placeholders вызов получает его первым positional argument, callable value вызывается с одним аргументом, а .field читает поле. Pipeline левоассоциативен.
Определённое поведение
Placeholder связывается с ближайшим содержащим call, после чего действует обычный порядок вызова. Несколько placeholders получают одно и то же сохранённое левое значение. Named arguments остаются после positional/spread, а generic call checking выполняется после binding placeholder/insertion. Wildcard _ в pattern остаётся discard и не связан с pipeline.
Ограничения и явный отказ
Отклоняются bare _, _ как callee/member/field label, RHS-выражение без callable, named-before-positional и optional-property sugar |> ?.field. Pipeline не вычисляет левую часть для каждого placeholder и не вставляет дополнительный аргумент при наличии placeholder.
Отложенная граница
Пользовательские pipe operators, implicit async lifting, автоматическое error propagation, partial application, optional pipe-field sugar и широкая композиция не входят в профиль. >> определён в SPEC, но public docs используют |> или именованные функции.
Пример
function double(value: int) -> int { value * 2 }
let values = [1, 2, 3]
let doubled = values |> map(_, double)
print("{doubled}")