PipeTo

Homing pipe ~>

The enhanced pipe operator which can specify the target position.

Getting Start

To use PipeTo with your projects, edit your mix.exs file and add it as a dependency:

def deps do
[{:pipe_to, "~> 0.1.0"}]
end
defp application do
[applications: [:pipe_to]]
end

Introduction

> import PipeTo
> 1 ~> Enum.at([1, 2, 3], _)
# 2

It can works with pipe operator well.

> 5 ~> Enum.take(1..10, _) |> Enum.reverse()
# [5, 4, 3, 2, 1]

In fact, if you don't specify the position with _, it acts just like normal |>

> [4, 8, 1] ~> Enum.max()
# 8

Override the Kernel.|>/2

Since ~> is the enhanced pipe operator, you can override the Kernel.|>/2 with it.

defmodule Foo do
use PipeTo.Override
def bar do
2 |> Enum.drop(1..10, _) |> Enum.at(1)
end
end
Foo.bar
# 4

Disclaimer

I have read through the proposals of pipe operator enhancement on the elixir-lang-core, like this, this or this.

The reason I still want this is because the combination of curried function (or partial application) with pipe operator is so elegant, like this F# example here. Since Elixir doesn't have these mechnism, and also anonymous function call use .(), so syntactically (well, aesthetically) the only choice I have is to modify the pipe operator.

Is it any good?

Yes

License

Apache 2