Below is the API for the OCaml standard library. It's directly copied over from the OCaml Manual, formatted to the Reason syntax and styled accordingly. The API docs are work-in-progress; we'll be polishing these gradually!

If you're targeting JavaScript, the API docs for BuckleScript includes all of below, plus JS-specific APIs.

`module Queue: sig .. end`

First-in first-out queues.

This module implements queues (FIFOs), with in-place modification.

**Warning** This module is not thread-safe: each `Queue.t`

value
must be protected from concurrent access (e.g. with a `Mutex.t`

).
Failure to do so can lead to a crash.

```
type t 'a;
```

The type of queues containing elements of type

`'a`

.```
exception Empty;
```

```
let create: unit => t 'a;
```

Return a new queue, initially empty.

```
let add: 'a => t 'a => unit;
```

`add x q`

adds the element `x`

at the end of the queue `q`

.```
let push: 'a => t 'a => unit;
```

`push`

is a synonym for `add`

.```
let take: t 'a => 'a;
```

`take q`

removes and returns the first element in queue `q`

,
or raises `Empty`

if the queue is empty.```
let pop: t 'a => 'a;
```

`pop`

is a synonym for `take`

.```
let peek: t 'a => 'a;
```

`peek q`

returns the first element in queue `q`

, without removing
it from the queue, or raises `Empty`

if the queue is empty.```
let top: t 'a => 'a;
```

`top`

is a synonym for `peek`

.```
let clear: t 'a => unit;
```

Discard all elements from a queue.

```
let copy: t 'a => t 'a;
```

Return a copy of the given queue.

```
let is_empty: t 'a => bool;
```

Return

`true`

if the given queue is empty, `false`

otherwise.```
let length: t 'a => int;
```

Return the number of elements in a queue.

```
let iter: ('a => unit) => t 'a => unit;
```

`iter f q`

applies `f`

in turn to all elements of `q`

,
from the least recently entered to the most recently entered.
The queue itself is unchanged.```
let fold: ('b => 'a => 'b) => 'b => t 'a => 'b;
```

`fold f accu q`

is equivalent to `List.fold_left f accu l`

,
where `l`

is the list of `q`

's elements. The queue remains
unchanged.```
let transfer: t 'a => t 'a => unit;
```

`transfer q1 q2`

adds all of `q1`

's elements at the end of
the queue `q2`

, then clears `q1`

. It is equivalent to the
sequence `iter (fun x -> add x q2) q1; clear q1`

, but runs
in constant time.