README.md

# Zip 🤐

A simple library to enable elementwise operations on collections. Use it like this:

```elixir
Zip.add([1], [1])      # => [2]
Zip.multiply([1], [1]) # => [1]
Zip.subtract([1], [1]) # => [0]
Zip.divide([10], [2])  # => [5]
Zip.apply([5], [2], Integer, :mod)  # => [1]
Zip.apply([[1, 2], [3, 4]], [7, 7], Enum, :intersperse) #=> [[1, 7, 2], [3, 7, 4]]
Zip.apply([[1, 2, 3, 4], [1, 2, 3, 4]], [2, 3], Enum, :map_every, [fn x -> x * 10 end])  # => [[10, 2, 30, 4], [10, 2, 3, 40]]
```

### Roadmap

1. Enable arbitrary operations - either user defined or callbacks?
2. Enable a wider range of elements in the list - support decimal, e.g.
3. Probably part of 2 - ensure elementwise pairs are of the same type. Do we need to? As long as the function accepts them fine
4. Stream dat data
5. Mad speed gainz?

## Installation

[Available in Hex](https://hex.pm/docs/publish), install by adding `zip` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:zip, "~> 0.1.0"}
  ]
end
```

Docs can be found here: [https://hexdocs.pm/zip](https://hexdocs.pm/zip) 👩‍⚕️ 👩‍⚕️