# Function chaining with |\> and filter function

**URL:** <https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060>\
**Category:** General Usage\
**Tags:** question, piping\
**Created:** [November 1, 2018, 6:28pm UTC](https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060 "2018-11-01T18:28:11Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![sirex](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sirex/32/5910_2.png) [@sirex](https://discourse.julialang.org/u/sirex)\
**Post date:** [November 1, 2018, 6:28pm UTC](https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060/1 "2018-11-01T18:28:11Z")

</div>

How can I call `filter(isodd)` using function chaining `|>`?

This does not work:

```julia
julia> 1:9 |> filter(isodd)
ERROR: MethodError: no method matching filter(::typeof(isodd))
Closest candidates are:
  filter(::Any, ::Array{T,1} where T) at array.jl:2352
  filter(::Any, ::BitArray) at bitarray.jl:1637
  filter(::Any, ::AbstractArray) at array.jl:2313
  ...
Stacktrace:
 [1] top-level scope at none:0

```

I’m using Julia 1.0.1.

---

<div class="post-metadata">

**Author:** ![adamslc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adamslc/32/3452_2.png) [@adamslc](https://discourse.julialang.org/u/adamslc)\
**Post date:** [November 1, 2018, 6:32pm UTC](https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060/2 "2018-11-01T18:32:12Z")

</div>

The function chaining syntax only works if the function accepts a single argument. You can use an anonymous function for this purpose:

```julia
collect(1:9) |> x -> filter(isodd, x)

```

Although, subjectively I think that this is more readable:

```julia
filter(isodd, collect(1:9))

```

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [November 1, 2018, 6:56pm UTC](https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060/3 "2018-11-01T18:56:38Z")

</div>

Check out

> <https://github.com/oxinabox/Pipe.jl/blob/master/README.md>

And  
[https://github.com/FNj/Hose.jl](https://github.com/FNj/Hose.jl)

---

<div class="post-metadata">

**Author:** ![sirex](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sirex/32/5910_2.png) [@sirex](https://discourse.julialang.org/u/sirex)\
**Post date:** [November 1, 2018, 7:03pm UTC](https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060/4 "2018-11-01T19:03:18Z")

</div>

`filter(::Function)::Function` could return a function with single argument:

```julia
julia> import Base: filter

julia> filter(f::Function)::Function = x -> filter(f, x)
filter (generic function with 9 methods)

julia> 1:9 |> filter(isodd)
5-element Array{Int64,1}:
 1
 3
 5
 7
 9

```

---

<div class="post-metadata">

**Author:** ![davidanthoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davidanthoff/32/223493_2.png) [@davidanthoff](https://discourse.julialang.org/u/davidanthoff)\
**Post date:** [November 1, 2018, 7:53pm UTC](https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060/5 "2018-11-01T19:53:18Z")

</div>

You can also use [Query.jl](https://github.com/queryverse/Query.jl)’s `@filter`, which just works with pipelines.

---

<div class="post-metadata">

**Author:** ![Liso](https://avatars.discourse-cdn.com/v4/letter/l/898d66/32.png) [@Liso](https://discourse.julialang.org/u/Liso)\
**Post date:** [November 1, 2018, 9:24pm UTC](https://discourse.julialang.org/t/function-chaining-with-and-filter-function/17060/6 "2018-11-01T21:24:08Z")

</div>

Just for more complet serie:

```julia
filter(1:9) do x; isodd(x) end

```
