Skip to content

cryptosense/records

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dynamic records

Build Status

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

Example

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" Record.Type.int
let y = Point.field "y" Record.Type.int
let z = Point.field "z" Record.Type.int

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:

{"x":3,"y":4,"z":5}

Licensing

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