README.md

# gleam_zlists

A library for working with **lazy lists** in **Gleam**.

_Honestly, is just a wrapper for_ [vjache/erlang-zlists](https://github.com/vjache/erlang-zlists) :pleading_face:

## Installation

Add `gleam_zlists` to your `rebar.config` dependencies:

```erlang
{deps, [
    {gleam_zlists, {git, "https://github.com/mrdimosthenis/gleam_zlists", {tag, "0.1"}}
]}.
```

## Examples

```rust
import gleam_zlists.{ZList} as zlist

[1, 2, 3]
|> zlist.of_list
|> zlist.map(fn(x) { 2 * x })
|> zlist.to_list
// [2, 4, 6]

[1, 2, 3]
|> zlist.of_list
|> zlist.filter(fn(x) { int.is_even(x) })
|> zlist.to_list
// [2]

[1, 2, 3]
|> zlist.of_list
|> zlist.reduce(0, fn(x, acc) { x + acc })
// 6

zlist.iterate(0, fn(x) { x + 1 })
|> zlist.take(5)
|> zlist.to_list
// [0, 1, 2, 3, 4]
```

## Function Signatures

```rust
concat(zlists: ZList(ZList(a))) -> ZList(a)
```

```rust
count(zlist: ZList(a)) -> Int
```

```rust
dedup(zlist: ZList(a)) -> ZList(a)
```

```rust
drop(zlist: ZList(a), n: Int) -> ZList(a)
```

```rust
drop_while(zlist: ZList(a), fun: fn(a) -> Bool) -> ZList(a)
```

```rust
each(zlist: ZList(a), fun: fn(a) -> b) -> Nil
```

```rust
filter(zlist: ZList(a), fun: fn(a) -> Bool) -> ZList(a)
```

```rust
flat_map(zlist: ZList(a), fun: fn(a) -> ZList(b)) -> ZList(b)
```

```rust
iterate(start_value: a, next_fun: fn(a) -> a) -> ZList(a)
```

```rust
map(zlist: ZList(a), fun: fn(a) -> b) -> ZList(b)
```

```rust
of_list(list: List(a)) -> ZList(a)
```

```rust
range(first: Int, last: Int, step: Int) -> ZList(Int)
```

```rust
reduce(zlist: ZList(a), acc: b, fun: fn(a, b) -> b) -> b
```

```rust
split(zlist: ZList(a), n: Int) -> tuple(List(a), ZList(a))
```

```rust
split_while(zlist: ZList(a), fun: fn(a) -> Bool) -> tuple(List(a), ZList(a))
```

```rust
take(zlist: ZList(a), n: Int) -> ZList(a)
```

```rust
take_while(zlist: ZList(a), fun: fn(a) -> Bool) -> ZList(a)
```

```rust
to_list(zlist: ZList(a)) -> List(a)
```

```rust
zip(left: ZList(a), right: ZList(b)) -> ZList(tuple(a, b))
```