Elixir makes it pretty easy to inspect data that is passed through a pipeline:
map = %{one: "un", two: "deux"}
|> Map.put(:three, "three")
|> IO.inspect()
|> Map.put(:four, "quatre")will print this to stdout:
%{one: "un", two: "deux", three: "trois"}before returning:
%{one: "un", two: "deux", three: "trois", four: "quatre"}But what if we want to print something more specific, like only the map keys?
map = Map.put(%{one: "un", two: "deux"}, :three, "three")
IO.inspect(Map.keys(map))
map = Map.put(map, :four, "quatre")We had to break our nice pipeline 😞
But since Elixir 1.12, we can use Kernel.tap/2 to keep our pipeline intact while inspecting data a bit more:
map = %{one: "un", two: "deux"}
|> Map.put(:three, "three")
|> tap(&IO.inspect(Map.keys(&1)))
|> Map.put(:four, "quatre")will print this to stdout:
[:one, :two, :three]before returning:
%{one: "un", two: "deux", three: "trois", four: "quatre"}🎉