diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-07-11 02:52:25 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-07-11 02:52:25 -0300 |
| commit | f7aa2d28053979f33d90a3c7bdec1ff6daa49b94 (patch) | |
| tree | b87c94b82cf84933ba7ae1be0d70a8c960e267de /lib/label.mli | |
| parent | 59c3b1a20aae2ef9c45e74d454337c07aa43f59e (diff) | |
| download | SOL-f7aa2d28053979f33d90a3c7bdec1ff6daa49b94.tar.gz SOL-f7aa2d28053979f33d90a3c7bdec1ff6daa49b94.zip | |
canonical term algebra: labels, records, rationals, sequences
Diffstat (limited to '')
| -rw-r--r-- | lib/label.mli | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/label.mli b/lib/label.mli new file mode 100644 index 0000000..6f9f273 --- /dev/null +++ b/lib/label.mli @@ -0,0 +1,31 @@ +(** Attribute labels. + + A label names an attribute of a record or a relation schema, + written [name:] in Sol source. Labels are the keys of every + {!Term.t} record, so the whole term algebra sits on them. *) + +type t +(** A validated label. Values of this type always hold a well-formed + label name, by construction. *) + +val of_string : string -> (t, [ `Invalid_label of string ]) result +(** The only way in. A well-formed label starts with a lowercase + letter, followed by letters, digits, or underscores. Everything + that builds or looks up record attributes goes through labels + made here. *) + +val to_string : t -> string +(** The label name, without the colon. *) + +val equal : t -> t -> bool + +val compare : t -> t -> int +(** Total order on names. Gives records a canonical attribute order + regardless of how the source spelled them, which {!Term.equal} + and content addressing rely on. *) + +val pp : Format.formatter -> t -> unit +(** Prints [name:], as in Sol source. *) + +module Map : Map.S with type key = t +(** Attribute maps, used by {!Term.t} records. *) |
