Must admit that I did not follow all details of the new proposal. Yet, it is great to see the options from different packages collected in one place.
To me, the base Julia version do not seem much worse, i.e., Julia already has a lot of concise syntax. Furthermore, I just realized that it allows hanging lambdas a la Haskell:
df |>
dropmissing |> x ->
filter(:id => >(6), x) |> x ->
groupby(x, :group) |> x ->
combine(x, :age => sum)
"a=1 b=2 c=3" |>
split |> it->
map(it) do it
split(it, "=") |> it ->
Symbol(it[1]) => parse(Int, it[2])
end |>
NamedTuple
Thereby, the inserted argument can be moved a bit out of side, i.e., together with an editor shortcut for inserting |> it -> or |> ⬚ -> and maybe jumping to the next line this might be a workable solution already?
At least for simple chains, some higher order functions might also be quite nice:
∝(i, f) = (args...) -> it -> f(args[1:i-1]..., it, args[i:end]...) # inserts it at the i-th position
⊚(f, g) = g ∘ f # reverse composition
[1,2,3] |> (2∝filter)(isodd) ⊚ (2∝map)(sqrt)
df |>
dropmissing ⊚
(2∝filter)(:id => >(6)) ⊚
(1∝groupby)(:group) ⊚
(1∝combine)(:age => sum)
Kind of tacit programming with numbered arguments …