Stack(3) OCaml library Stack(3)

# [NAME](#NAME)

Stack - Last-in first-out stacks.

# [Module](#Module)

Module Stack

# [Documentation](#Documentation)

Module **Stack**  
: **sig end**

Last-in first-out stacks.

This module implements stacks (LIFOs), with in-place modification.

*type* **'a** *t*

The type of stacks containing elements of type **'a** .

*exception Empty*

Raised when **Stack.pop** or **Stack.top** is applied to an empty stack.

*val create* : **unit -&gt; 'a t**

Return a new stack, initially empty.

*val push* : **'a -&gt; 'a t -&gt; unit**

**push x s** adds the element **x** at the top of stack **s** .

*val pop* : **'a t -&gt; 'a**

**pop s** removes and returns the topmost element in stack **s** , or raises **Stack.Empty** if the stack is empty.

*val pop\_opt* : **'a t -&gt; 'a option**

**pop\_opt s** removes and returns the topmost element in stack **s** , or returns **None** if the stack is empty.

**Since** 4.08

*val top* : **'a t -&gt; 'a**

**top s** returns the topmost element in stack **s** , or raises **Stack.Empty** if the stack is empty.

*val top\_opt* : **'a t -&gt; 'a option**

**top\_opt s** returns the topmost element in stack **s** , or **None** if the stack is empty.

**Since** 4.08

*val clear* : **'a t -&gt; unit**

Discard all elements from a stack.

*val copy* : **'a t -&gt; 'a t**

Return a copy of the given stack.

*val is\_empty* : **'a t -&gt; bool**

Return **true** if the given stack is empty, **false** otherwise.

*val length* : **'a t -&gt; int**

Return the number of elements in a stack. Time complexity [O(1)](/man/enterprise-packages/ocaml-4/O.1)

*val iter* : **('a -&gt; unit) -&gt; 'a t -&gt; unit**

**iter f s** applies **f** in turn to all elements of **s** , from the element at the top of the stack to the element at the bottom of the stack. The stack itself is unchanged.

*val fold* : **('b -&gt; 'a -&gt; 'b) -&gt; 'b -&gt; 'a t -&gt; 'b**

**fold f accu s** is **(f (... (f (f accu x1) x2) ...) xn)** where **x1** is the top of the stack, **x2** the second element, and **xn** the bottom element. The stack is unchanged.

**Since** 4.03

## [Stacks and Sequences](#Stacks_and_Sequences)

*val to\_seq* : **'a t -&gt; 'a Seq.t**

Iterate on the stack, top to bottom. It is safe to modify the stack during iteration.

**Since** 4.07

*val add\_seq* : **'a t -&gt; 'a Seq.t -&gt; unit**

Add the elements from the sequence on the top of the stack.

**Since** 4.07

*val of\_seq* : **'a Seq.t -&gt; 'a t**

Create a stack from the sequence.

**Since** 4.07

2026-09-15 OCamldoc

---

Document: Stack(3o) from ocaml-4 4.14.4-r3 (Chainguard OS)
Source: https://github.com/ocaml/ocaml
