Stdlib.Type(3) OCaml library Stdlib.Type(3)

# [NAME](#NAME)

Stdlib.Type - no description

# [Module](#Module)

Module Stdlib.Type

# [Documentation](#Documentation)

Module **Type**  
: **(module Stdlib\_\_Type)**

## [Type equality witness](#Type_equality_witness)

*type* **(\_, \_)** *eq* =  
| Equal **:** **('a, 'a) eq**

The purpose of **eq** is to represent type equalities that may not otherwise be known by the type checker (e.g. because they may depend on dynamic data).

A value of type **(a, b) eq** represents the fact that types **a** and **b** are equal.

If one has a value **eq : (a, b) eq** that proves types **a** and **b** are equal, one can use it to convert a value of type **a** to a value of type **b** by pattern matching on **Equal** :

```


      let cast (type a) (type b) (Equal : (a, b) Type.eq) (a : a) : b = a


    
```

At runtime, this function simply returns its second argument unchanged.

## [Type identifiers](#Type_identifiers)

*module Id :* **sig end**

Type identifiers.

A type identifier is a value that denotes a type. Given two type identifiers, they can be tested for **Type.Id.provably\_equal** to prove they denote the same type. Note that:

-Unequal identifiers do not imply unequal types: a given type can be denoted by more than one identifier.

-Type identifiers can be marshalled, but they get a new, distinct, identity on unmarshalling, so the equalities are lost.

See an **Type.Id.example** of use.

2026-10-01 OCamldoc

---

Document: Stdlib.Type(3o) from ocaml 5.5.1-r1 (Chainguard OS)
Source: https://github.com/ocaml/ocaml
