https://github.com/cryptosense/records
Dynamic records in OCaml
https://github.com/cryptosense/records
Last synced: about 1 year ago
JSON representation
Dynamic records in OCaml
- Host: GitHub
- URL: https://github.com/cryptosense/records
- Owner: cryptosense
- License: bsd-2-clause
- Created: 2015-07-28T15:13:15.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2023-04-28T18:29:09.000Z (about 3 years ago)
- Last Synced: 2025-03-24T13:21:18.252Z (about 1 year ago)
- Language: OCaml
- Size: 106 KB
- Stars: 27
- Watchers: 6
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Dynamic records
[![Build Status][build_status_badge]][build_status_link]
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.
```ocaml
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).
```ocaml
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.
```ocaml
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.
```ocaml
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:
```json
{"x":3,"y":4,"z":5}
```
## Licensing
This library is available under the 2-clause BSD license.
See `COPYING` for more information.
[build_status_badge]: https://github.com/cryptosense/records/actions/workflows/main.yml/badge.svg
[build_status_link]: https://github.com/cryptosense/records/actions/workflows/main.yml