# Limit


Stream limiting: take, takeWhile, drop.

## `drop`

_drop: skip the first `n` elements and forward the remainder unchanged; non-positive `n` is a no-op._

```
drop : Int -> Computation (Step r a) -> Computation (Step r a)
```

Skip the first `n` elements of a stream. Non-positive `n` is a no-op.

## `take`

_take: yield at most the first `n` elements of a stream, then `Done null`; non-positive `n` yields the empty stream immediately._

```
take : Int -> Computation (Step r a) -> Computation (Step null a)
```

Take the first `n` elements of a stream. Non-positive `n` yields
the empty stream.

## `takeWhile`

_takeWhile: yield prefix elements while the predicate holds; terminates on the first element that fails the predicate._

```
takeWhile : (a -> Bool) -> Computation (Step r a) -> Computation (Step null a)
```

Take elements while a predicate holds. The first element that
fails the predicate is discarded along with everything after.

