More robust access to the pipelined variable
Pipelines are a fantastic syntax to clarify intent when doing variable mutations.
The default syntax |>
passes the pipelined variable to the invoked function as the first parameter but does not provide a means to reference the variable.
This means that mutating a pipelined variable while introspecting its state cannot be done with default syntax.
If the transform is simple, consider using an anonymous function and Capture operator as in this example where a field in a map is “moved” to a new key
map_with_moved_keys =
%{foo: "bar"}
|> (&Map.put_new(&1, :new_foo, &1.foo)).()
|> Map.drop([:foo])
%{new_foo: "bar"}