### Introduction

Pipe is a Python module enablig a sh like infix syntax (using pipes).
As an exemple, here is the solution for the 2nd Euler Project exercise :

"Find the sum of all the even-valued terms in Fibonacci which do not exceed four million."
(Given fib a generator of fibonacci numbers)

```
euler2 = fib() | where(lambda x: x % 2 == 0)
| take_while(lambda x: x < 4000000)
| add
```

### Installation

```
$ easy_install pipe
```

or

```
$ git clone https://github.com/JulienPalard/Pipe.git
$ cd Pipe
$ python setup.py install
```

### Vocabulary

- a Pipe is a 'pipeable' function, somthing that you can pipe to. In the code '[1, 2, 3] | add'
`add`

is a Pipe - a Pipe function: A standard function returning a Pipe so it can be used like a normal Pipe but called like in : [1, 2, 3] | concat("#")

### Syntax

The basic syntax is to use a Pipe like in a shell :

```
>>> [1, 2, 3] | add
6
```

A Pipe can be a function call, for exemple the Pipe function 'where' :

```
>>> [1, 2, 3] | where(lambda x: x % 2 == 0) #doctest: +ELLIPSIS
<generator object <genexpr> at ...>
```

A Pipe as a function is nothing more than a function returning a specialized Pipe.

### Constructing your own

You can construct your pipes using Pipe classe initialized with lambdas like :

```
stdout = Pipe(lambda x: sys.stdout.write(str(x)))
select = Pipe(lambda iterable, pred: (pred(x) for x in iterable))
```

Or using decorators :

```
@Pipe
def stdout(x):
sys.stdout.write(str(x))
```

### Existing Pipes

You should read the README file or the python documentation for the module.