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.ml | |
| parent | 59c3b1a20aae2ef9c45e74d454337c07aa43f59e (diff) | |
| download | SOL-f7aa2d28053979f33d90a3c7bdec1ff6daa49b94.tar.gz SOL-f7aa2d28053979f33d90a3c7bdec1ff6daa49b94.zip | |
canonical term algebra: labels, records, rationals, sequences
Diffstat (limited to 'lib/label.ml')
| -rw-r--r-- | lib/label.ml | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/label.ml b/lib/label.ml new file mode 100644 index 0000000..acc3e49 --- /dev/null +++ b/lib/label.ml @@ -0,0 +1,19 @@ +type t = string + +let is_lower c = c >= 'a' && c <= 'z' + +let is_body c = + is_lower c || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c = '_' + +let well_formed s = + String.length s > 0 + && is_lower s.[0] + && String.for_all is_body s + +let of_string s = if well_formed s then Ok s else Error (`Invalid_label s) +let to_string t = t +let equal = String.equal +let compare = String.compare +let pp fmt t = Format.fprintf fmt "%s:" t + +module Map = Map.Make (String) |
