Qqwy/elixir-capture_pipe
{ "createdAt": "2020-07-22T18:11:35Z", "defaultBranch": "master", "description": "A pipe-macro for Elixir that allows bare function captures", "fullName": "Qqwy/elixir-capture_pipe", "homepage": null, "language": "Elixir", "name": "elixir-capture_pipe", "pushedAt": "2020-07-22T18:49:44Z", "stargazersCount": 45, "topics": [], "updatedAt": "2023-11-13T18:06:36Z", "url": "https://github.com/Qqwy/elixir-capture_pipe"}CapturePipe
Section titled “CapturePipe”CapturePipe exposes an extended pipe-operator that allows the usage of bare function captures.
This is useful to insert the pipe’s results into a datastructure such as a tuple.
What this macro does, is if it encounters a & capture,
it wraps the whole operand in (...).() which is the
anonymous-function-call syntax that Elixir’s normal pipe accepts,
that (argubably) is less easy on the eyes.
For instance, 10 |> &{:ok, &1} is turned into 10 |> (&{:ok, &1}).()
Examples
Section titled “Examples”Still works as normal:
iex> [1,2,3] |> Enum.map(fn x -> x + 1 end)[2,3,4]Insert the result of an operation into a tuple
iex> 42 |> &{:ok, &1}{:ok, 42}It also works multiple times in a row.
iex> 20 |> &{:ok, &1} |> &[&1, 2, 3][{:ok, 20}, 2, 3]Besides the function-capture syntax CapturePipe also enables you to use anonymnous functions directly inside a pipe, performing similar wrapping:
iex> 42 |> fn val -> to_string(val) end"42"Even if the pipes are nested deeply and interspersed with ‘normal’ pipe calls:
iex> (10iex> |> &Kernel.div(20, &1)iex> |> Kernel.-()iex> |> to_string()iex> |> &"The answer is: \#{&1}!"iex> |> String.upcase()iex> |> &{:ok, &1}iex> ){:ok, "THE ANSWER IS: -2!"}Installation
Section titled “Installation”Capturepipe can be installed
by adding capture_pipe to your list of dependencies in mix.exs:
def deps do [ {:capture_pipe, "~> 0.1.0"} ]endDocumentation can be found at https://hexdocs.pm/capture_pipe.