Skip to content

Qqwy/elixir-capture_pipe

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

CapturePipe

hex.pm version Build Status Documentation

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

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> (10
iex> |> &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

Capturepipe can be installed by adding capture_pipe to your list of dependencies in mix.exs:

def deps do
  [
    {:capture_pipe, "~> 0.1.0"}
  ]
end

Documentation can be found at https://hexdocs.pm/capture_pipe.

About

A pipe-macro for Elixir that allows bare function captures

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages