This is the Kernel.|>/2 macro sequence. It felt a little unsatisfying knowing it translates into Macro.pipe. With a little more time and testing it seems to cleanly reduce to:
unquote( Macro.pipe( (quote do: val), right, 0 ) )
A simple test looking like:
iex(101)> 14+7 ~> IO.inspect(label: 1) |> IO.inspect( label: 2) ~> IO.inspect( label: 3 ) |> IO.inspect( label: 4 )
case(14 + 7 ~> IO.inspect(label: 1) |> IO.inspect(label: 2)) do
{:error, _} = err ->
err
val ->
IO.inspect(val, label: 3)
end
case(14 + 7) do
{:error, _} = err ->
err
val ->
IO.inspect(val, label: 1)
end
1: 21
2: 21
3: 21
4: 21
21
The code printing comes from an inline Macro.to_string( ast ) for illustration. The code shows backward since the unpipe rolls the pipe up in reverse while nesting.
This is the error tuple scenario:
iex(102)> { :error, 14+7 } ~> IO.inspect(label: 1) |> IO.inspect( label: 2) ~> IO.inspect( label: 3 ) |> IO.inspect( label: 4 )
case({:error, 14 + 7} ~> IO.inspect(label: 1) |> IO.inspect(label: 2)) do
{:error, _} = err ->
err
val ->
IO.inspect(val, label: 3)
end
case({:error, 14 + 7}) do
{:error, _} = err ->
err
val ->
IO.inspect(val, label: 1)
end
2: {:error, 21}
4: {:error, 21}
{:error, 21}






















