Skip to content
Dynamic records in OCaml
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Build Status docs

Dynamic records

This library enables you to define and manipulate dynamic records in OCaml.


Let us define a "point" record with three integer fields: x, y and z.

First, declare a new record layout.

module Point = (val Record.Safe.declare "point")

Second, define the fields. They have the type (int, Point.s) field (Point.s is a phantom type that guarantees type safety).

let x = Point.field "x"
let y = Point.field "y"
let z = Point.field "z"

Third, "seal" this record structure. This prevents it from being further modified. Structures must be sealed before they can be used.

let () = Point.seal ()

At this point, you have a working record structure. The next step is to create actual records. They have the type Point.s Record.t and are created using Point.make. Initially their fields have no value.

let _ =
  let p = Point.make () in
  Record.set p x 3;
  Record.set p y 4;
  Record.set p z 5;
  Record.format Format.std_formatter p

The last line outputs:



This library is available under the 2-clause BSD license. See COPYING for more information.

You can’t perform that action at this time.